diff options
author | Mark Brown <broonie@kernel.org> | 2017-08-30 22:15:31 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-08-30 22:15:31 +0100 |
commit | b388dc1f62a9bdd9c4758a0664e61d0f9a9da519 (patch) | |
tree | 696fd3c245700ee59ebcf3a65b90f8773b904624 /drivers/md/md.c | |
parent | 6969b2bae6dbe7f277a7c018b66d2f3ad662129f (diff) | |
parent | cc4a41fe5541a73019a864883297bd5043aa6d98 (diff) | |
download | lwn-b388dc1f62a9bdd9c4758a0664e61d0f9a9da519.tar.gz lwn-b388dc1f62a9bdd9c4758a0664e61d0f9a9da519.zip |
Merge tag 'v4.13-rc7' into asoc-component
Linux 4.13-rc7
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) |