diff options
Diffstat (limited to 'drivers/md/md.c')
| -rw-r--r-- | drivers/md/md.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 8cdca0296749..b01e458d31e9 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -2287,7 +2287,7 @@ static void export_array(struct mddev *mddev)  static bool set_in_sync(struct mddev *mddev)  { -	WARN_ON_ONCE(!spin_is_locked(&mddev->lock)); +	WARN_ON_ONCE(NR_CPUS != 1 && !spin_is_locked(&mddev->lock));  	if (!mddev->in_sync) {  		mddev->sync_checkers++;  		spin_unlock(&mddev->lock); @@ -7996,7 +7996,7 @@ bool md_write_start(struct mddev *mddev, struct bio *bi)  	if (mddev->safemode == 1)  		mddev->safemode = 0;  	/* sync_checkers is always 0 when writes_pending is in per-cpu mode */ -	if (mddev->in_sync || !mddev->sync_checkers) { +	if (mddev->in_sync || mddev->sync_checkers) {  		spin_lock(&mddev->lock);  		if (mddev->in_sync) {  			mddev->in_sync = 0; @@ -8656,6 +8656,9 @@ void md_check_recovery(struct mddev *mddev)  	if (mddev_trylock(mddev)) {  		int spares = 0; +		if (!mddev->external && mddev->safemode == 1) +			mddev->safemode = 0; +  		if (mddev->ro) {  			struct md_rdev *rdev;  			if (!mddev->external && mddev->in_sync)  | 
