md-cluster: Read the disk bitmap sb and check if it needs recovery
authorGuoqing Jiang <gqjiang@suse.com>
Fri, 10 Jul 2015 09:01:22 +0000 (17:01 +0800)
committerNeilBrown <neilb@suse.com>
Mon, 31 Aug 2015 17:42:41 +0000 (19:42 +0200)
In gather_all_resync_info, we need to read the disk bitmap sb and
check if it needs recovery.

Reviewed-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: NeilBrown <neilb@suse.com>
drivers/md/md-cluster.c

index 29f65e2be0253312b6be708113c0d10d30ce7378..c35a03a7eb1184c7becd6370770e57c950c89371 100644 (file)
@@ -625,6 +625,7 @@ static int gather_all_resync_info(struct mddev *mddev, int total_slots)
        struct dlm_lock_resource *bm_lockres;
        struct suspend_info *s;
        char str[64];
+       sector_t lo, hi;
 
 
        for (i = 0; i < total_slots; i++) {
@@ -659,7 +660,20 @@ static int gather_all_resync_info(struct mddev *mddev, int total_slots)
                        lockres_free(bm_lockres);
                        goto out;
                }
-               /* TODO: Read the disk bitmap sb and check if it needs recovery */
+
+               /* Read the disk bitmap sb and check if it needs recovery */
+               ret = bitmap_copy_from_slot(mddev, i, &lo, &hi, false);
+               if (ret) {
+                       pr_warn("md-cluster: Could not gather bitmaps from slot %d", i);
+                       lockres_free(bm_lockres);
+                       continue;
+               }
+               if ((hi > 0) && (lo < mddev->recovery_cp)) {
+                       set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
+                       mddev->recovery_cp = lo;
+                       md_check_recovery(mddev);
+               }
+
                dlm_unlock_sync(bm_lockres);
                lockres_free(bm_lockres);
        }