On Tue, Mar 07, 2023 at 03:37:21PM +0000, Pavel Begunkov wrote: > On 3/7/23 14:15, Ming Lei wrote: > > Hello, > > > > Add IORING_OP_FUSED_CMD, it is one special URING_CMD, which has to > > be SQE128. The 1st SQE(master) is one 64byte URING_CMD, and the 2nd > > 64byte SQE(slave) is another normal 64byte OP. For any OP which needs > > to support slave OP, io_issue_defs[op].fused_slave needs to be set as 1, > > and its ->issue() can retrieve/import buffer from master request's > > fused_cmd_kbuf. The slave OP is actually submitted from kernel, part of > > this idea is from Xiaoguang's ublk ebpf patchset, but this patchset > > submits slave OP just like normal OP issued from userspace, that said, > > SQE order is kept, and batching handling is done too. > > From a quick look through patches it all looks a bit complicated > and intrusive, all over generic hot paths. I think instead we Really? The main change to generic hot paths are adding one 'true/false' parameter to io_init_req(). For others, the change is just check on req->flags or issue_flags, which is basically zero cost. > should be able to use registered buffer table as intermediary and > reuse splicing. Let me try it out I will take a look at you patch, but last time, Linus has pointed out that splice isn't one good way, in which buffer ownership transferring is one big issue for writing data to page retrieved from pipe. https://lore.kernel.org/linux-block/CAJfpeguQ3xn2-6svkkVXJ88tiVfcDd-eKi1evzzfvu305fMoyw@xxxxxxxxxxxxxx/ Thanks, Ming