Commit 8615cb65 authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Mike Snitzer

dm: remove useless loop in __split_and_process_bio

Remove useless "while" loop. If the condition ci.sector_count && !error is
true, we go to a branch that ends with "break". If this condition is
false, the "while" loop will not be executed again. So, the loop can't be
executed more than once.
Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent c40819f2
...@@ -1641,38 +1641,35 @@ static blk_qc_t __split_and_process_bio(struct mapped_device *md, ...@@ -1641,38 +1641,35 @@ static blk_qc_t __split_and_process_bio(struct mapped_device *md,
} else { } else {
ci.bio = bio; ci.bio = bio;
ci.sector_count = bio_sectors(bio); ci.sector_count = bio_sectors(bio);
while (ci.sector_count && !error) { error = __split_and_process_non_flush(&ci);
error = __split_and_process_non_flush(&ci); if (ci.sector_count && !error) {
if (ci.sector_count && !error) { /*
/* * Remainder must be passed to submit_bio_noacct()
* Remainder must be passed to submit_bio_noacct() * so that it gets handled *after* bios already submitted
* so that it gets handled *after* bios already submitted * have been completely processed.
* have been completely processed. * We take a clone of the original to store in
* We take a clone of the original to store in * ci.io->orig_bio to be used by end_io_acct() and
* ci.io->orig_bio to be used by end_io_acct() and * for dec_pending to use for completion handling.
* for dec_pending to use for completion handling. */
*/ struct bio *b = bio_split(bio, bio_sectors(bio) - ci.sector_count,
struct bio *b = bio_split(bio, bio_sectors(bio) - ci.sector_count, GFP_NOIO, &md->queue->bio_split);
GFP_NOIO, &md->queue->bio_split); ci.io->orig_bio = b;
ci.io->orig_bio = b;
/*
/* * Adjust IO stats for each split, otherwise upon queue
* Adjust IO stats for each split, otherwise upon queue * reentry there will be redundant IO accounting.
* reentry there will be redundant IO accounting. * NOTE: this is a stop-gap fix, a proper fix involves
* NOTE: this is a stop-gap fix, a proper fix involves * significant refactoring of DM core's bio splitting
* significant refactoring of DM core's bio splitting * (by eliminating DM's splitting and just using bio_split)
* (by eliminating DM's splitting and just using bio_split) */
*/ part_stat_lock();
part_stat_lock(); __dm_part_stat_sub(dm_disk(md)->part0,
__dm_part_stat_sub(dm_disk(md)->part0, sectors[op_stat_group(bio_op(bio))], ci.sector_count);
sectors[op_stat_group(bio_op(bio))], ci.sector_count); part_stat_unlock();
part_stat_unlock();
bio_chain(b, bio);
bio_chain(b, bio); trace_block_split(b, bio->bi_iter.bi_sector);
trace_block_split(b, bio->bi_iter.bi_sector); ret = submit_bio_noacct(bio);
ret = submit_bio_noacct(bio);
break;
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment