Sorry a few ints while looking overthis again: > +static void nvme_end_async_pt(struct request *req, blk_status_t err) The naming here is a bit silly and doesn't match what we use elsewhere in the code. I'd suggest nvme_uring_cmd_end_io instead. > +{ > + struct nvme_uring_cmd_pdu *pdu = nvme_uring_cmd_pdu(ioucmd); > + > + /* to free bio on completion, as req->bio will be null at that time */ > + pdu->bio = rq->bio; > + pdu->meta = nvme_meta_from_bio(rq->bio); > + pdu->meta_buffer = meta_buffer; > + pdu->meta_len = meta_len; > + rq->end_io_data = ioucmd; > +} And this really should be folded into the only caller.