diff --git a/drivers/md/dm.c b/drivers/md/dm.c index 6c2e0ad4aeb5f5be153288586a7ac667c3cd4434..b93ffa2d631024d40a6be1069192b15e88974249 100644 --- a/drivers/md/dm.c +++ b/drivers/md/dm.c @@ -1581,6 +1581,8 @@ 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. */ @@ -1626,7 +1628,6 @@ static blk_qc_t __split_and_process_bio(struct mapped_device *md, * the usage of io->orig_bio in dm_remap_zone_report() * won't be affected by this reassignment. */ - int cpu; struct bio *b = bio_split(bio, bio_sectors(bio) - ci.sector_count, GFP_NOIO, &md->queue->bio_split); ci.io->orig_bio = b; @@ -1638,9 +1639,9 @@ static blk_qc_t __split_and_process_bio(struct mapped_device *md, * significant refactoring of DM core's bio splitting * (by eliminating DM's splitting and just using bio_split) */ - cpu = part_stat_lock(); - __part_stat_add(cpu, &dm_disk(md)->part0, - sectors[op_stat_group(bio_op(bio))], -(ci.sector_count)); + 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);