md: use interruptible wait when duration is controlled by userspace.
User space can set various limits on an md array so that resync waits when it gets to a certain point, or so that I/O is blocked for a short while. When md is waiting against one of these limit, it should use an interruptible wait so as not to add to the load average, and so are not to trigger a warning if the wait goes on for too long. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
@@ -3699,14 +3699,21 @@ static int make_request(struct request_queue *q, struct bio * bi)
|
||||
goto retry;
|
||||
}
|
||||
}
|
||||
/* FIXME what if we get a false positive because these
|
||||
* are being updated.
|
||||
*/
|
||||
|
||||
if (bio_data_dir(bi) == WRITE &&
|
||||
logical_sector >= mddev->suspend_lo &&
|
||||
logical_sector < mddev->suspend_hi) {
|
||||
release_stripe(sh);
|
||||
schedule();
|
||||
/* As the suspend_* range is controlled by
|
||||
* userspace, we want an interruptible
|
||||
* wait.
|
||||
*/
|
||||
flush_signals(current);
|
||||
prepare_to_wait(&conf->wait_for_overlap,
|
||||
&w, TASK_INTERRUPTIBLE);
|
||||
if (logical_sector >= mddev->suspend_lo &&
|
||||
logical_sector < mddev->suspend_hi)
|
||||
schedule();
|
||||
goto retry;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user