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.