On Mon, Jan 10 2022 at 12:35P -0500, Christoph Hellwig <hch@xxxxxxxxxxxxx> wrote: > On Mon, Jan 10, 2022 at 03:51:40PM +0800, Ming Lei wrote: > > Add block layer API of resubmit_bio_noacct() for handling blk-throttle > > iops limit correctly. Typical use case is that bio split, and it isn't > > good to export blk_throtl_charge_bio_split() for drivers, so add new API > > for serving such purpose. > > Umm, submit_bio_noacct is meant exactly for this case of resubmitting > a bio. We should not need another API for that. > Ming is lifting code out of __blk_queue_split() for reuse (by DM in this instance, because it has its own bio_split+bio_chain). Are you saying submit_bio_noacct() should be made to call blk_throtl_charge_bio_split() and blk_throtl_charge_bio_split() simply return if not a split bio? (not sure bio has enough context to know, other than looking at some side-effect change from bio_chain) But Ming: your __blk_queue_split() change seems wrong. Prior to your patch __blk_queue_split() did: bio_chain(split, *bio); submit_bio_noacct(*bio); *bio = split; blk_throtl_charge_bio_split(*bio); After your patch (effectively): bio_chain(split, *bio); submit_bio_noacct(*bio); blk_throtl_charge_bio_split(bio); *bio = split; Maybe that was intended? (or maybe it doesn't matter because bio_split copies fields with bio_clone_fast())? Regardless, it is subtle. Should blk_throtl_charge_bio_split() just be pushed down to bio_split()? In general, such narrow hacks for how to properly resubmit split bios are asking for further trouble. As is, I'm having to triage new reports of bio-based accounting issues (which has called into question my hack/fix commit a1e1cb72d9649 ("dm: fix redundant IO accounting for bios that need splitting") that papered over this bigger issue of needing proper split IO accounting, so likely needs to be revisited). We also have the much bigger issue of IO poll support (or lack-there-of) for split bios. Mike -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel