aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/md/md.c22
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 */
8795void md_check_recovery(struct mddev *mddev) 8795void 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}
8968EXPORT_SYMBOL(md_check_recovery); 8970EXPORT_SYMBOL(md_check_recovery);