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: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
c40819f267
commit
8615cb65bd
1 changed files with 27 additions and 30 deletions
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue