aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/raid1.c')
-rw-r--r--drivers/md/raid1.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 515554c7365b..f24a9e14021d 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -570,7 +570,7 @@ static int read_balance(struct r1conf *conf, struct r1bio *r1_bio, int *max_sect
570 if (best_dist_disk < 0) { 570 if (best_dist_disk < 0) {
571 if (is_badblock(rdev, this_sector, sectors, 571 if (is_badblock(rdev, this_sector, sectors,
572 &first_bad, &bad_sectors)) { 572 &first_bad, &bad_sectors)) {
573 if (first_bad < this_sector) 573 if (first_bad <= this_sector)
574 /* Cannot use this */ 574 /* Cannot use this */
575 continue; 575 continue;
576 best_good_sectors = first_bad - this_sector; 576 best_good_sectors = first_bad - this_sector;
@@ -877,7 +877,8 @@ static sector_t wait_barrier(struct r1conf *conf, struct bio *bio)
877 ((conf->start_next_window < 877 ((conf->start_next_window <
878 conf->next_resync + RESYNC_SECTORS) && 878 conf->next_resync + RESYNC_SECTORS) &&
879 current->bio_list && 879 current->bio_list &&
880 !bio_list_empty(current->bio_list))), 880 (!bio_list_empty(&current->bio_list[0]) ||
881 !bio_list_empty(&current->bio_list[1])))),
881 conf->resync_lock); 882 conf->resync_lock);
882 conf->nr_waiting--; 883 conf->nr_waiting--;
883 } 884 }
@@ -1087,7 +1088,7 @@ static void make_request(struct mddev *mddev, struct bio * bio)
1087 */ 1088 */
1088 DEFINE_WAIT(w); 1089 DEFINE_WAIT(w);
1089 for (;;) { 1090 for (;;) {
1090 flush_signals(current); 1091 sigset_t full, old;
1091 prepare_to_wait(&conf->wait_barrier, 1092 prepare_to_wait(&conf->wait_barrier,
1092 &w, TASK_INTERRUPTIBLE); 1093 &w, TASK_INTERRUPTIBLE);
1093 if (bio_end_sector(bio) <= mddev->suspend_lo || 1094 if (bio_end_sector(bio) <= mddev->suspend_lo ||
@@ -1096,7 +1097,10 @@ static void make_request(struct mddev *mddev, struct bio * bio)
1096 !md_cluster_ops->area_resyncing(mddev, WRITE, 1097 !md_cluster_ops->area_resyncing(mddev, WRITE,
1097 bio->bi_iter.bi_sector, bio_end_sector(bio)))) 1098 bio->bi_iter.bi_sector, bio_end_sector(bio))))
1098 break; 1099 break;
1100 sigfillset(&full);
1101 sigprocmask(SIG_BLOCK, &full, &old);
1099 schedule(); 1102 schedule();
1103 sigprocmask(SIG_SETMASK, &old, NULL);
1100 } 1104 }
1101 finish_wait(&conf->wait_barrier, &w); 1105 finish_wait(&conf->wait_barrier, &w);
1102 } 1106 }