On Sun, Mar 13, 2022 at 02:37:43AM +0000, Al Viro wrote: > On Fri, Feb 25, 2022 at 07:54:31PM +0100, Max Kellermann wrote: > > > /* Insert it into the buffer array */ > > buf = &pipe->bufs[head & mask]; > > - buf->page = page; > > - buf->ops = &anon_pipe_buf_ops; > > - buf->offset = 0; > > - buf->len = 0; > > - if (is_packetized(filp)) > > - buf->flags = PIPE_BUF_FLAG_PACKET; > > - else > > - buf->flags = PIPE_BUF_FLAG_CAN_MERGE; > > + pipe_buf_init(buf, page, 0, 0, > > + &anon_pipe_buf_ops, > > + is_packetized(filp) ? PIPE_BUF_FLAG_PACKET : PIPE_BUF_FLAG_CAN_MERGE); > > *cringe* > FWIW, packetized case is very rare, so how about turning that into > pipe_buf_init(buf, page, 0, 0, > &anon_pipe_buf_ops, > PIPE_BUF_FLAG_CAN_MERGE); > if (unlikely(is_packetized(filp))) > buf->flags = PIPE_BUF_FLAG_PACKET; > Your pipe_buf_init() is inlined, so it shouldn't be worse from the optimizer > POV - it should be able to start with calculating that value and then storing > that, etc. That's not equivalent. I think the better option here is to always initialise flags to 0 (and not have a parameter for it): pipe_buf_init(buf, page, 0, 0, &anon_pipe_buf_ops); if (is_packetized(filp)) buf->flags = PIPE_BUF_FLAG_PACKET; else buf->flags = PIPE_BUF_FLAG_CAN_MERGE;