md/raid5: make async_copy_data() to support different page offset
authorYufen Yu <yuyufen@huawei.com>
Thu, 20 Aug 2020 13:22:07 +0000 (09:22 -0400)
committerSong Liu <songliubraving@fb.com>
Thu, 24 Sep 2020 23:44:44 +0000 (16:44 -0700)
ops_run_biofill() and ops_run_biodrain() will call async_copy_data()
to copy sh->dev[i].page from or to bio page. For now, it implies the
offset of dev[i].page is 0. But we want to support different page offset
in the following.

Thus, pass page offset to these functions and replace 'page_offset'
with 'page_offset + poff'.

No functional change.

Signed-off-by: Yufen Yu <yuyufen@huawei.com>
Signed-off-by: Song Liu <songliubraving@fb.com>
drivers/md/raid5.c

index b64f56c..7988d37 100644 (file)
@@ -1227,7 +1227,7 @@ again:
 
 static struct dma_async_tx_descriptor *
 async_copy_data(int frombio, struct bio *bio, struct page **page,
-       sector_t sector, struct dma_async_tx_descriptor *tx,
+       unsigned int poff, sector_t sector, struct dma_async_tx_descriptor *tx,
        struct stripe_head *sh, int no_skipcopy)
 {
        struct bio_vec bvl;
@@ -1273,11 +1273,11 @@ async_copy_data(int frombio, struct bio *bio, struct page **page,
                                    !no_skipcopy)
                                        *page = bio_page;
                                else
-                                       tx = async_memcpy(*page, bio_page, page_offset,
+                                       tx = async_memcpy(*page, bio_page, page_offset + poff,
                                                  b_offset, clen, &submit);
                        } else
                                tx = async_memcpy(bio_page, *page, b_offset,
-                                                 page_offset, clen, &submit);
+                                                 page_offset + poff, clen, &submit);
                }
                /* chain the operations */
                submit.depend_tx = tx;
@@ -1350,6 +1350,7 @@ static void ops_run_biofill(struct stripe_head *sh)
                        while (rbi && rbi->bi_iter.bi_sector <
                                dev->sector + RAID5_STRIPE_SECTORS(conf)) {
                                tx = async_copy_data(0, rbi, &dev->page,
+                                                    dev->offset,
                                                     dev->sector, tx, sh, 0);
                                rbi = r5_next_bio(conf, rbi, dev->sector);
                        }
@@ -1790,6 +1791,7 @@ again:
                                        set_bit(R5_Discard, &dev->flags);
                                else {
                                        tx = async_copy_data(1, wbi, &dev->page,
+                                                            dev->offset,
                                                             dev->sector, tx, sh,
                                                             r5c_is_writeback(conf->log));
                                        if (dev->page != dev->orig_page &&