File tree Expand file tree Collapse file tree 1 file changed +8
-3
lines changed Expand file tree Collapse file tree 1 file changed +8
-3
lines changed Original file line number Diff line number Diff line change @@ -9417,8 +9417,13 @@ static void md_start_sync(struct work_struct *ws)
94179417{
94189418 struct mddev * mddev = container_of (ws , struct mddev , sync_work );
94199419 int spares = 0 ;
9420+ bool suspend = false;
94209421
9421- mddev_lock_nointr (mddev );
9422+ if (md_spares_need_change (mddev ))
9423+ suspend = true;
9424+
9425+ suspend ? mddev_suspend_and_lock_nointr (mddev ) :
9426+ mddev_lock_nointr (mddev );
94229427
94239428 if (!md_is_rdwr (mddev )) {
94249429 /*
@@ -9454,7 +9459,7 @@ static void md_start_sync(struct work_struct *ws)
94549459 goto not_running ;
94559460 }
94569461
9457- mddev_unlock (mddev );
9462+ suspend ? mddev_unlock_and_resume ( mddev ) : mddev_unlock (mddev );
94589463 md_wakeup_thread (mddev -> sync_thread );
94599464 sysfs_notify_dirent_safe (mddev -> sysfs_action );
94609465 md_new_event ();
@@ -9466,7 +9471,7 @@ static void md_start_sync(struct work_struct *ws)
94669471 clear_bit (MD_RECOVERY_REQUESTED , & mddev -> recovery );
94679472 clear_bit (MD_RECOVERY_CHECK , & mddev -> recovery );
94689473 clear_bit (MD_RECOVERY_RUNNING , & mddev -> recovery );
9469- mddev_unlock (mddev );
9474+ suspend ? mddev_unlock_and_resume ( mddev ) : mddev_unlock (mddev );
94709475
94719476 wake_up (& resync_wait );
94729477 if (test_and_clear_bit (MD_RECOVERY_RECOVER , & mddev -> recovery ) &&
You can’t perform that action at this time.
0 commit comments