From: Yu Kuai <yuku...@huawei.com>

This case can be handled without knowing internal implementation.

Prepare to introduce CONFIG_MD_BITMAP.

Signed-off-by: Yu Kuai <yuku...@huawei.com>
---
 drivers/md/md-bitmap.c |  8 +-------
 drivers/md/md-bitmap.h | 12 ++++++++++++
 drivers/md/raid1.c     |  6 +++---
 drivers/md/raid10.c    | 15 ++++++---------
 drivers/md/raid5.c     |  7 ++-----
 5 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
index 8e14bbfbfc88..33f952c78397 100644
--- a/drivers/md/md-bitmap.c
+++ b/drivers/md/md-bitmap.c
@@ -1769,15 +1769,9 @@ static bool __bitmap_start_sync(struct bitmap *bitmap, 
sector_t offset,
                                sector_t *blocks, bool degraded)
 {
        bitmap_counter_t *bmc;
-       bool rv;
+       bool rv = false;
 
-       if (bitmap == NULL) {/* FIXME or bitmap set as 'failed' */
-               *blocks = 1024;
-               return true; /* always resync if no bitmap */
-       }
        spin_lock_irq(&bitmap->counts.lock);
-
-       rv = false;
        bmc = md_bitmap_get_counter(&bitmap->counts, offset, blocks, 0);
        if (bmc) {
                /* locked */
diff --git a/drivers/md/md-bitmap.h b/drivers/md/md-bitmap.h
index 3b242ee10856..6a5806ebb11a 100644
--- a/drivers/md/md-bitmap.h
+++ b/drivers/md/md-bitmap.h
@@ -133,4 +133,16 @@ static inline bool md_bitmap_enabled(struct mddev *mddev)
        return mddev->bitmap_ops->enabled(mddev->bitmap);
 }
 
+static inline bool md_bitmap_start_sync(struct mddev *mddev, sector_t offset,
+                                       sector_t *blocks, bool degraded)
+{
+       /* always resync if no bitmap */
+       if (!md_bitmap_enabled(mddev)) {
+               *blocks = 1024;
+               return true;
+       }
+
+       return mddev->bitmap_ops->start_sync(mddev, offset, blocks, degraded);
+}
+
 #endif
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 49960fbcffca..f6943849f34a 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -2827,7 +2827,7 @@ static sector_t raid1_sync_request(struct mddev *mddev, 
sector_t sector_nr,
        /* before building a request, check if we can skip these blocks..
         * This call the bitmap_start_sync doesn't actually record anything
         */
-       if (!mddev->bitmap_ops->start_sync(mddev, sector_nr, &sync_blocks, 
true) &&
+       if (!md_bitmap_start_sync(mddev, sector_nr, &sync_blocks, true) &&
            !conf->fullsync && !test_bit(MD_RECOVERY_REQUESTED, 
&mddev->recovery)) {
                /* We can skip this block, and probably several more */
                *skipped = 1;
@@ -3002,8 +3002,8 @@ static sector_t raid1_sync_request(struct mddev *mddev, 
sector_t sector_nr,
                if (len == 0)
                        break;
                if (sync_blocks == 0) {
-                       if (!mddev->bitmap_ops->start_sync(mddev, sector_nr,
-                                               &sync_blocks, still_degraded) &&
+                       if (!md_bitmap_start_sync(mddev, sector_nr,
+                                                 &sync_blocks, still_degraded) 
&&
                            !conf->fullsync &&
                            !test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery))
                                break;
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 8d4d19012f42..ca594d56f8d0 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -3358,9 +3358,8 @@ static sector_t raid10_sync_request(struct mddev *mddev, 
sector_t sector_nr,
                         * we only need to recover the block if it is set in
                         * the bitmap
                         */
-                       must_sync = mddev->bitmap_ops->start_sync(mddev, sect,
-                                                                 &sync_blocks,
-                                                                 true);
+                       must_sync = md_bitmap_start_sync(mddev, sect,
+                                                        &sync_blocks, true);
                        if (sync_blocks < max_sync)
                                max_sync = sync_blocks;
                        if (!must_sync &&
@@ -3403,9 +3402,8 @@ static sector_t raid10_sync_request(struct mddev *mddev, 
sector_t sector_nr,
                                }
                        }
 
-                       must_sync = mddev->bitmap_ops->start_sync(mddev, sect,
-                                               &sync_blocks, still_degraded);
-
+                       md_bitmap_start_sync(mddev, sect, &sync_blocks,
+                                            still_degraded);
                        any_working = 0;
                        for (j=0; j<conf->copies;j++) {
                                int k;
@@ -3581,9 +3579,8 @@ static sector_t raid10_sync_request(struct mddev *mddev, 
sector_t sector_nr,
                                        mddev_is_clustered(mddev) &&
                                        (sector_nr + 2 * RESYNC_SECTORS > 
conf->cluster_sync_high));
 
-               if (!mddev->bitmap_ops->start_sync(mddev, sector_nr,
-                                                  &sync_blocks,
-                                                  mddev->degraded) &&
+               if (!md_bitmap_start_sync(mddev, sector_nr, &sync_blocks,
+                                         mddev->degraded) &&
                    !conf->fullsync && !test_bit(MD_RECOVERY_REQUESTED,
                                                 &mddev->recovery)) {
                        /* We can skip this block */
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 8f33d2478d94..5b825c196b56 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -6534,8 +6534,7 @@ static inline sector_t raid5_sync_request(struct mddev 
*mddev, sector_t sector_n
        }
        if (!test_bit(MD_RECOVERY_REQUESTED, &mddev->recovery) &&
            !conf->fullsync &&
-           !mddev->bitmap_ops->start_sync(mddev, sector_nr, &sync_blocks,
-                                          true) &&
+           !md_bitmap_start_sync(mddev, sector_nr, &sync_blocks, true) &&
            sync_blocks >= RAID5_STRIPE_SECTORS(conf)) {
                /* we can skip this block, and probably more */
                do_div(sync_blocks, RAID5_STRIPE_SECTORS(conf));
@@ -6566,9 +6565,7 @@ static inline sector_t raid5_sync_request(struct mddev 
*mddev, sector_t sector_n
                        still_degraded = true;
        }
 
-       mddev->bitmap_ops->start_sync(mddev, sector_nr, &sync_blocks,
-                                     still_degraded);
-
+       md_bitmap_start_sync(mddev, sector_nr, &sync_blocks, still_degraded);
        set_bit(STRIPE_SYNC_REQUESTED, &sh->state);
        set_bit(STRIPE_HANDLE, &sh->state);
 
-- 
2.39.2


Reply via email to