On 7/24/24 14:41, Pavel Begunkov wrote: ...> io_free_batch_list() {
if (req->flags & GROUP) { if (req_is_member(req)) { req->grp_leader->grp_refs--; if (req->grp_leader->grp_refs == 0) { req->io_task_work.func = io_req_task_complete; io_req_task_work_add(req->grp_leader); // can be done better.... } goto free_req; } WARN_ON_ONCE(!req_is_leader()); if (!(req->flags & SEEN_FIRST_TIME)) { // already posted it just before coming here req->flags |= SKIP_CQE; // we'll see it again when grp_refs hit 0 req->flags |= SEEN_FIRST_TIME;
Forgot queue_group_members() here
// Don't free the req, we're leaving it alive for now. // req->ref/REQ_F_REFCOUNT will be put next time we get here. return; // or continue } clean_up_request_resources(); // calls back into ublk // and now free the leader } free_req: // the rest of io_free_batch_list() if (flags & REQ_F_REFCOUNT) { req_drop_ref(); .... } ... }
-- Pavel Begunkov