diff options
author | NeilBrown <neilb@suse.de> | 2012-07-31 10:04:55 +1000 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-07-31 10:04:55 +1000 |
commit | 90cf195d9bcb4bf70e8b6df5073b05164b279ba0 (patch) | |
tree | 815e0ad7c0b7f4af7eb04d07eb2093e60540bb55 /drivers/md | |
parent | 3f9e7c140e4c4e75bdeeb8df46dd40e49386c978 (diff) | |
download | lwn-90cf195d9bcb4bf70e8b6df5073b05164b279ba0.tar.gz lwn-90cf195d9bcb4bf70e8b6df5073b05164b279ba0.zip |
md: remove duplicated test on ->openers when calling do_md_stop()
do_md_stop tests mddev->openers while holding ->open_mutex,
and fails if this count is too high.
So callers do not need to check mddev->openers and doing so isn't
very meaningful as they don't hold ->open_mutex so the number could
change.
So remove the unnecessary tests on mddev->openers.
These are not called often enough for there to be any gain in
an early test on ->open_mutex to avoid the need for a slightly more
costly mutex_lock call.
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/md.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index d5ab4493c8be..f6c46109b071 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -3942,17 +3942,13 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len) break; case clear: /* stopping an active array */ - if (atomic_read(&mddev->openers) > 0) - return -EBUSY; err = do_md_stop(mddev, 0, NULL); break; case inactive: /* stopping an active array */ - if (mddev->pers) { - if (atomic_read(&mddev->openers) > 0) - return -EBUSY; + if (mddev->pers) err = do_md_stop(mddev, 2, NULL); - } else + else err = 0; /* already inactive */ break; case suspended: |