DM RAID: Set recovery flags on resume
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / md / dm-raid.c
index b0ba52459ed7381d4a802acb94e69df02f979149..ea2d90c78f788adf906fbd0f7b9aef7b7f4ec36e 100644 (file)
@@ -155,10 +155,7 @@ static void context_free(struct raid_set *rs)
        for (i = 0; i < rs->md.raid_disks; i++) {
                if (rs->dev[i].meta_dev)
                        dm_put_device(rs->ti, rs->dev[i].meta_dev);
-               if (rs->dev[i].rdev.sb_page)
-                       put_page(rs->dev[i].rdev.sb_page);
-               rs->dev[i].rdev.sb_page = NULL;
-               rs->dev[i].rdev.sb_loaded = 0;
+               md_rdev_clear(&rs->dev[i].rdev);
                if (rs->dev[i].data_dev)
                        dm_put_device(rs->ti, rs->dev[i].data_dev);
        }
@@ -859,7 +856,7 @@ static int analyse_superblocks(struct dm_target *ti, struct raid_set *rs)
        int ret;
        unsigned redundancy = 0;
        struct raid_dev *dev;
-       struct md_rdev *rdev, *freshest;
+       struct md_rdev *rdev, *tmp, *freshest;
        struct mddev *mddev = &rs->md;
 
        switch (rs->raid_type->level) {
@@ -877,7 +874,7 @@ static int analyse_superblocks(struct dm_target *ti, struct raid_set *rs)
        }
 
        freshest = NULL;
-       rdev_for_each(rdev, mddev) {
+       rdev_for_each_safe(rdev, tmp, mddev) {
                if (!rdev->meta_bdev)
                        continue;
 
@@ -1255,9 +1252,9 @@ static void raid_resume(struct dm_target *ti)
        if (!rs->bitmap_loaded) {
                bitmap_load(&rs->md);
                rs->bitmap_loaded = 1;
-       } else
-               md_wakeup_thread(rs->md.thread);
+       }
 
+       clear_bit(MD_RECOVERY_FROZEN, &rs->md.recovery);
        mddev_resume(&rs->md);
 }