md: remove special meaning of ->quiesce(.., 2)

The '2' argument means "wake up anything that is waiting".
This is an inelegant part of the design and was added
to help support management of suspend_lo/suspend_hi setting.
Now that suspend_lo/hi is managed in mddev_suspend/resume,
that need is gone.
These is still a couple of places where we call 'quiesce'
with an argument of '2', but they can safely be changed to
call ->quiesce(.., 1); ->quiesce(.., 0) which
achieve the same result at the small cost of pausing IO
briefly.

This removes a small "optimization" from suspend_{hi,lo}_store,
but it isn't clear that optimization served a useful purpose.
The code now is a lot clearer.

Suggested-by: Shaohua Li <shli@kernel.org>
Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Shaohua Li <shli@fb.com>
This commit is contained in:
NeilBrown
2017-10-19 12:49:15 +11:00
committed by Shaohua Li
parent 35bfc52187
commit b03e0ccb5a
9 changed files with 37 additions and 69 deletions

View File

@@ -4846,7 +4846,7 @@ suspend_lo_show(struct mddev *mddev, char *page)
static ssize_t
suspend_lo_store(struct mddev *mddev, const char *buf, size_t len)
{
unsigned long long old, new;
unsigned long long new;
int err;
err = kstrtoull(buf, 10, &new);
@@ -4862,17 +4862,10 @@ suspend_lo_store(struct mddev *mddev, const char *buf, size_t len)
if (mddev->pers == NULL ||
mddev->pers->quiesce == NULL)
goto unlock;
old = mddev->suspend_lo;
mddev_suspend(mddev);
mddev->suspend_lo = new;
if (new >= old) {
/* Shrinking suspended region */
wake_up(&mddev->sb_wait);
mddev->pers->quiesce(mddev, 2);
} else {
/* Expanding suspended region - need to wait */
mddev_suspend(mddev);
mddev_resume(mddev);
}
mddev_resume(mddev);
err = 0;
unlock:
mddev_unlock(mddev);
@@ -4890,7 +4883,7 @@ suspend_hi_show(struct mddev *mddev, char *page)
static ssize_t
suspend_hi_store(struct mddev *mddev, const char *buf, size_t len)
{
unsigned long long old, new;
unsigned long long new;
int err;
err = kstrtoull(buf, 10, &new);
@@ -4903,20 +4896,13 @@ suspend_hi_store(struct mddev *mddev, const char *buf, size_t len)
if (err)
return err;
err = -EINVAL;
if (mddev->pers == NULL ||
mddev->pers->quiesce == NULL)
if (mddev->pers == NULL)
goto unlock;
old = mddev->suspend_hi;
mddev_suspend(mddev);
mddev->suspend_hi = new;
if (new <= old) {
/* Shrinking suspended region */
wake_up(&mddev->sb_wait);
mddev->pers->quiesce(mddev, 2);
} else {
/* Expanding suspended region - need to wait */
mddev_suspend(mddev);
mddev_resume(mddev);
}
mddev_resume(mddev);
err = 0;
unlock:
mddev_unlock(mddev);