md: raid1/raid10: don't handle failure of bio_add_page()
authorMing Lei <tom.leiming@gmail.com>
Thu, 16 Mar 2017 16:12:22 +0000 (00:12 +0800)
committerShaohua Li <shli@fb.com>
Fri, 24 Mar 2017 17:41:36 +0000 (10:41 -0700)
All bio_add_page() is for adding one page into resync bio,
which is big enough to hold RESYNC_PAGES pages, and
the current bio_add_page() doesn't check queue limit any more,
so it won't fail at all.

remove unused label (shaohua)

Signed-off-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Shaohua Li <shli@fb.com>
drivers/md/raid1.c
drivers/md/raid10.c

index 941f810638912581a3baae127fc83e845e18b76c..569f501fb710346a859eb2bf9c5b5228e18d3a56 100644 (file)
@@ -2894,28 +2894,18 @@ static sector_t raid1_sync_request(struct mddev *mddev, sector_t sector_nr,
                        bio = r1_bio->bios[i];
                        if (bio->bi_end_io) {
                                page = bio->bi_io_vec[bio->bi_vcnt].bv_page;
-                               if (bio_add_page(bio, page, len, 0) == 0) {
-                                       /* stop here */
-                                       bio->bi_io_vec[bio->bi_vcnt].bv_page = page;
-                                       while (i > 0) {
-                                               i--;
-                                               bio = r1_bio->bios[i];
-                                               if (bio->bi_end_io==NULL)
-                                                       continue;
-                                               /* remove last page from this bio */
-                                               bio->bi_vcnt--;
-                                               bio->bi_iter.bi_size -= len;
-                                               bio_clear_flag(bio, BIO_SEG_VALID);
-                                       }
-                                       goto bio_full;
-                               }
+
+                               /*
+                                * won't fail because the vec table is big
+                                * enough to hold all these pages
+                                */
+                               bio_add_page(bio, page, len, 0);
                        }
                }
                nr_sectors += len>>9;
                sector_nr += len>>9;
                sync_blocks -= (len>>9);
        } while (r1_bio->bios[disk]->bi_vcnt < RESYNC_PAGES);
- bio_full:
        r1_bio->sectors = nr_sectors;
 
        if (mddev_is_clustered(mddev) &&
index 28c62e0c42aabe133763917ebfcfe648271e9a7d..6c9783ba85db7865b910f6d0aea99100af83a168 100644 (file)
@@ -3413,27 +3413,16 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
                if (len == 0)
                        break;
                for (bio= biolist ; bio ; bio=bio->bi_next) {
-                       struct bio *bio2;
                        page = bio->bi_io_vec[bio->bi_vcnt].bv_page;
-                       if (bio_add_page(bio, page, len, 0))
-                               continue;
-
-                       /* stop here */
-                       bio->bi_io_vec[bio->bi_vcnt].bv_page = page;
-                       for (bio2 = biolist;
-                            bio2 && bio2 != bio;
-                            bio2 = bio2->bi_next) {
-                               /* remove last page from this bio */
-                               bio2->bi_vcnt--;
-                               bio2->bi_iter.bi_size -= len;
-                               bio_clear_flag(bio2, BIO_SEG_VALID);
-                       }
-                       goto bio_full;
+                       /*
+                        * won't fail because the vec table is big enough
+                        * to hold all these pages
+                        */
+                       bio_add_page(bio, page, len, 0);
                }
                nr_sectors += len>>9;
                sector_nr += len>>9;
        } while (biolist->bi_vcnt < RESYNC_PAGES);
- bio_full:
        r10_bio->sectors = nr_sectors;
 
        while (biolist) {
@@ -4502,25 +4491,15 @@ read_more:
                if (len > PAGE_SIZE)
                        len = PAGE_SIZE;
                for (bio = blist; bio ; bio = bio->bi_next) {
-                       struct bio *bio2;
-                       if (bio_add_page(bio, page, len, 0))
-                               continue;
-
-                       /* Didn't fit, must stop */
-                       for (bio2 = blist;
-                            bio2 && bio2 != bio;
-                            bio2 = bio2->bi_next) {
-                               /* Remove last page from this bio */
-                               bio2->bi_vcnt--;
-                               bio2->bi_iter.bi_size -= len;
-                               bio_clear_flag(bio2, BIO_SEG_VALID);
-                       }
-                       goto bio_full;
+                       /*
+                        * won't fail because the vec table is big enough
+                        * to hold all these pages
+                        */
+                       bio_add_page(bio, page, len, 0);
                }
                sector_nr += len >> 9;
                nr_sectors += len >> 9;
        }
-bio_full:
        rcu_read_unlock();
        r10_bio->sectors = nr_sectors;