Commit edd256bb authored by Mike Snitzer's avatar Mike Snitzer Committed by Li Nan
Browse files

dm: revert partial fix for redundant bio-based IO accounting

mainline inclusion
from mainline-v5.17-rc2
commit f524d9c9
category: bugfix
bugzilla: 189706, https://gitee.com/openeuler/kernel/issues/I9BD67

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f524d9c95fab54783d0038f7a3e8c014d5b56857



--------------------------------

Reverts a1e1cb72 ("dm: fix redundant IO accounting for bios that
need splitting") because it was too narrow in scope (only addressed
redundant 'sectors[]' accounting and not ios, nsecs[], etc).

Cc: stable@vger.kernel.org
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
Link: https://lore.kernel.org/r/20220128155841.39644-3-snitzer@redhat.com


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>

Conflict:
	drivers/md/dm.c
	Context changed, do not affect the logic of the code.

Signed-off-by: default avatarLi Nan <linan122@huawei.com>
parent b670dd90
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -1610,9 +1610,6 @@ static void init_clone_info(struct clone_info *ci, struct mapped_device *md,
	ci->sector = bio->bi_iter.bi_sector;
}

#define __dm_part_stat_sub(part, field, subnd)	\
	(part_stat_get(part, field) -= (subnd))

/*
 * Entry point to split a bio into clones and submit them to the targets.
 */
@@ -1650,18 +1647,6 @@ static blk_qc_t __split_and_process_bio(struct mapped_device *md,
							  GFP_NOIO, &md->queue->bio_split);
				ci.io->orig_bio = b;

				/*
				 * Adjust IO stats for each split, otherwise upon queue
				 * reentry there will be redundant IO accounting.
				 * NOTE: this is a stop-gap fix, a proper fix involves
				 * significant refactoring of DM core's bio splitting
				 * (by eliminating DM's splitting and just using bio_split)
				 */
				part_stat_lock();
				__dm_part_stat_sub(&dm_disk(md)->part0,
						   sectors[op_stat_group(bio_op(bio))], ci.sector_count);
				part_stat_unlock();

				bio_chain(b, bio);
				trace_block_split(md->queue, b, bio->bi_iter.bi_sector);
				ret = submit_bio_noacct(bio);