aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid5.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/raid5.c')
-rw-r--r--drivers/md/raid5.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 1f444ae07f89..37835538b58e 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -3699,14 +3699,21 @@ static int make_request(struct request_queue *q, struct bio * bi)
3699 goto retry; 3699 goto retry;
3700 } 3700 }
3701 } 3701 }
3702 /* FIXME what if we get a false positive because these 3702
3703 * are being updated.
3704 */
3705 if (bio_data_dir(bi) == WRITE && 3703 if (bio_data_dir(bi) == WRITE &&
3706 logical_sector >= mddev->suspend_lo && 3704 logical_sector >= mddev->suspend_lo &&
3707 logical_sector < mddev->suspend_hi) { 3705 logical_sector < mddev->suspend_hi) {
3708 release_stripe(sh); 3706 release_stripe(sh);
3709 schedule(); 3707 /* As the suspend_* range is controlled by
3708 * userspace, we want an interruptible
3709 * wait.
3710 */
3711 flush_signals(current);
3712 prepare_to_wait(&conf->wait_for_overlap,
3713 &w, TASK_INTERRUPTIBLE);
3714 if (logical_sector >= mddev->suspend_lo &&
3715 logical_sector < mddev->suspend_hi)
3716 schedule();
3710 goto retry; 3717 goto retry;
3711 } 3718 }
3712 3719