On Thu, Oct 31, 2024 at 09:07:18AM -0600, Jens Axboe wrote: > Another option is that we fully stick with the per-group buffer concept, > which could also work just fine with io_rsrc_node. If we stick with the > OP_GROUP_START thing, then that op could setup group_buf thing that is > local to that group. This is where an instantiated buffer would appear > too, keeping it strictly local to that group. That avoids needing any > kind of ring state for this, and the group_buf would be propagated from > the group leader to the members. The group_buf lives until all members > of the group are dead, at which point it's released. I forget if your > grouping implementation mandated the same scheme I originally had, where > the group leader completes last? If it does, then it's a natural thing Yes, the group leader's CQE is posted after all members' CQE are posted, and the leader request is freed after all member request is freed. > to have the group_buf live for the duration of the group leader, and it > can just be normal per-io_kiocb data at that point, nothing special > needed there. That is basically what GROUP_KBUF is written, just not using io_rsrc_node. > > As with the previous scheme, each request using one of these > IORING_RSRC_KBUFFER nodes just assigns it like it would any other fixed > resource node, and the normal completion path puts it. Here the thing is simpler, all member can just use leader's io_rsrc_node, leader's rsrc_node reference is grabbed & leased to member when adding member to group, and released by the normal io_req_put_rsrc_nodes(). Thanks, Ming