diff options
-rw-r--r-- | drivers/md/md.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index a25ebf81b266..62bf96daa157 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -8794,6 +8794,18 @@ static void md_start_sync(struct work_struct *ws) | |||
8794 | */ | 8794 | */ |
8795 | void md_check_recovery(struct mddev *mddev) | 8795 | void md_check_recovery(struct mddev *mddev) |
8796 | { | 8796 | { |
8797 | if (test_bit(MD_ALLOW_SB_UPDATE, &mddev->flags) && mddev->sb_flags) { | ||
8798 | /* Write superblock - thread that called mddev_suspend() | ||
8799 | * holds reconfig_mutex for us. | ||
8800 | */ | ||
8801 | set_bit(MD_UPDATING_SB, &mddev->flags); | ||
8802 | smp_mb__after_atomic(); | ||
8803 | if (test_bit(MD_ALLOW_SB_UPDATE, &mddev->flags)) | ||
8804 | md_update_sb(mddev, 0); | ||
8805 | clear_bit_unlock(MD_UPDATING_SB, &mddev->flags); | ||
8806 | wake_up(&mddev->sb_wait); | ||
8807 | } | ||
8808 | |||
8797 | if (mddev->suspended) | 8809 | if (mddev->suspended) |
8798 | return; | 8810 | return; |
8799 | 8811 | ||
@@ -8953,16 +8965,6 @@ void md_check_recovery(struct mddev *mddev) | |||
8953 | unlock: | 8965 | unlock: |
8954 | wake_up(&mddev->sb_wait); | 8966 | wake_up(&mddev->sb_wait); |
8955 | mddev_unlock(mddev); | 8967 | mddev_unlock(mddev); |
8956 | } else if (test_bit(MD_ALLOW_SB_UPDATE, &mddev->flags) && mddev->sb_flags) { | ||
8957 | /* Write superblock - thread that called mddev_suspend() | ||
8958 | * holds reconfig_mutex for us. | ||
8959 | */ | ||
8960 | set_bit(MD_UPDATING_SB, &mddev->flags); | ||
8961 | smp_mb__after_atomic(); | ||
8962 | if (test_bit(MD_ALLOW_SB_UPDATE, &mddev->flags)) | ||
8963 | md_update_sb(mddev, 0); | ||
8964 | clear_bit_unlock(MD_UPDATING_SB, &mddev->flags); | ||
8965 | wake_up(&mddev->sb_wait); | ||
8966 | } | 8968 | } |
8967 | } | 8969 | } |
8968 | EXPORT_SYMBOL(md_check_recovery); | 8970 | EXPORT_SYMBOL(md_check_recovery); |