md: raid1: use bio helper in process_checks()
authorMing Lei <tom.leiming@gmail.com>
Thu, 16 Mar 2017 16:12:28 +0000 (00:12 +0800)
committerShaohua Li <shli@fb.com>
Fri, 24 Mar 2017 17:41:36 +0000 (10:41 -0700)
Avoid to direct access to bvec table.

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

index 21ef09ae5123091199607c781e6fdc57264f436e..d27b84666884168896980335019147f956c41da6 100644 (file)
@@ -2111,6 +2111,7 @@ static void process_checks(struct r1bio *r1_bio)
                int j;
                int size;
                int error;
+               struct bio_vec *bi;
                struct bio *b = r1_bio->bios[i];
                struct resync_pages *rp = get_resync_pages(b);
                if (b->bi_end_io != end_sync_read)
@@ -2129,9 +2130,7 @@ static void process_checks(struct r1bio *r1_bio)
                b->bi_private = rp;
 
                size = b->bi_iter.bi_size;
-               for (j = 0; j < vcnt ; j++) {
-                       struct bio_vec *bi;
-                       bi = &b->bi_io_vec[j];
+               bio_for_each_segment_all(bi, b, j) {
                        bi->bv_offset = 0;
                        if (size > PAGE_SIZE)
                                bi->bv_len = PAGE_SIZE;
@@ -2155,17 +2154,22 @@ static void process_checks(struct r1bio *r1_bio)
                int error = sbio->bi_error;
                struct page **ppages = get_resync_pages(pbio)->pages;
                struct page **spages = get_resync_pages(sbio)->pages;
+               struct bio_vec *bi;
+               int page_len[RESYNC_PAGES];
 
                if (sbio->bi_end_io != end_sync_read)
                        continue;
                /* Now we can 'fixup' the error value */
                sbio->bi_error = 0;
 
+               bio_for_each_segment_all(bi, sbio, j)
+                       page_len[j] = bi->bv_len;
+
                if (!error) {
                        for (j = vcnt; j-- ; ) {
                                if (memcmp(page_address(ppages[j]),
                                           page_address(spages[j]),
-                                          sbio->bi_io_vec[j].bv_len))
+                                          page_len[j]))
                                        break;
                        }
                } else