Re: [PATCH v2 12/12] nvmet: use bio_chain_and_submit to simplify bio chaining
Stephen Zhang <[email protected]> Mon, 1 Dec 2025 10:41:06 +0800
| Newsgroups | org.kernel.vger.linux-bcache,dev.linux.lists.gfs2,dev.linux.lists.ntfs3,dev.linux.lists.nvdimm,dev.linux.lists.virtualization,org.infradead.lists.linux-nvme,org.kernel.vger.linux-block,org.kernel.vger.linux-kernel,org.kernel.vger.linux-xfs |
|---|---|
| Message-ID | <CANubcdWAk2Mh5b9stjTh8N84jq+XAgaR3n2-VYRinU9ERtJLUw@mail.gmail.com> |
Sagi Grimberg <[email protected]> 于2025年12月1日周一 07:03写道: > > Acked-by: Sagi Grimberg <[email protected]> Hello, I already dropped this patch in v3: https://lore.kernel.org/all/[email protected]/ The reason is that the order of operations is critical. In the original code:: ---------------- ... bio->bi_end_io = nvmet_bio_done; for_each_sg(req->sg, sg, req->sg_cnt, i) { ... struct bio *prev = bio; .... bio_chain(bio, prev); submit_bio(prev); } ---------------- the oldest bio (i.e., prev) retains the real bi_end_io function: bio -> bio -> ... -> prev However, using bio_chain_and_submit(prev, bio) would create the reverse chain: prev -> prev -> ... -> bio where the newest bio would hold the real bi_end_io function, which does not match the required behavior in this context. Thanks, Shida