dm: remove useless loop in __split_and_process_bio
authorMikulas Patocka <mpatocka@redhat.com>
Mon, 1 Mar 2021 09:58:43 +0000 (04:58 -0500)
committerMike Snitzer <snitzer@redhat.com>
Fri, 26 Mar 2021 18:53:41 +0000 (14:53 -0400)
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>
drivers/md/dm.c

index 3f3be94..1dac75c 100644 (file)
@@ -1641,38 +1641,35 @@ static blk_qc_t __split_and_process_bio(struct mapped_device *md,
        } else {
                ci.bio = bio;
                ci.sector_count = bio_sectors(bio);
-               while (ci.sector_count && !error) {
-                       error = __split_and_process_non_flush(&ci);
-                       if (ci.sector_count && !error) {
-                               /*
-                                * Remainder must be passed to submit_bio_noacct()
-                                * so that it gets handled *after* bios already submitted
-                                * have been completely processed.
-                                * We take a clone of the original to store in
-                                * ci.io->orig_bio to be used by end_io_acct() and
-                                * for dec_pending to use for completion handling.
-                                */
-                               struct bio *b = bio_split(bio, bio_sectors(bio) - ci.sector_count,
-                                                         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(b, bio->bi_iter.bi_sector);
-                               ret = submit_bio_noacct(bio);
-                               break;
-                       }
+               error = __split_and_process_non_flush(&ci);
+               if (ci.sector_count && !error) {
+                       /*
+                        * Remainder must be passed to submit_bio_noacct()
+                        * so that it gets handled *after* bios already submitted
+                        * have been completely processed.
+                        * We take a clone of the original to store in
+                        * ci.io->orig_bio to be used by end_io_acct() and
+                        * for dec_pending to use for completion handling.
+                        */
+                       struct bio *b = bio_split(bio, bio_sectors(bio) - ci.sector_count,
+                                                 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(b, bio->bi_iter.bi_sector);
+                       ret = submit_bio_noacct(bio);
                }
        }