aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid1.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/raid1.c')
-rw-r--r--drivers/md/raid1.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 7ed59351fe97..af5056d56878 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -666,8 +666,11 @@ static int read_balance(struct r1conf *conf, struct r1bio *r1_bio, int *max_sect
666 break; 666 break;
667 } 667 }
668 continue; 668 continue;
669 } else 669 } else {
670 if ((sectors > best_good_sectors) && (best_disk >= 0))
671 best_disk = -1;
670 best_good_sectors = sectors; 672 best_good_sectors = sectors;
673 }
671 674
672 if (best_disk >= 0) 675 if (best_disk >= 0)
673 /* At least two disks to choose from so failfast is OK */ 676 /* At least two disks to choose from so failfast is OK */
@@ -1529,17 +1532,16 @@ static void raid1_write_request(struct mddev *mddev, struct bio *bio,
1529 plug = container_of(cb, struct raid1_plug_cb, cb); 1532 plug = container_of(cb, struct raid1_plug_cb, cb);
1530 else 1533 else
1531 plug = NULL; 1534 plug = NULL;
1532 spin_lock_irqsave(&conf->device_lock, flags);
1533 if (plug) { 1535 if (plug) {
1534 bio_list_add(&plug->pending, mbio); 1536 bio_list_add(&plug->pending, mbio);
1535 plug->pending_cnt++; 1537 plug->pending_cnt++;
1536 } else { 1538 } else {
1539 spin_lock_irqsave(&conf->device_lock, flags);
1537 bio_list_add(&conf->pending_bio_list, mbio); 1540 bio_list_add(&conf->pending_bio_list, mbio);
1538 conf->pending_count++; 1541 conf->pending_count++;
1539 } 1542 spin_unlock_irqrestore(&conf->device_lock, flags);
1540 spin_unlock_irqrestore(&conf->device_lock, flags);
1541 if (!plug)
1542 md_wakeup_thread(mddev->thread); 1543 md_wakeup_thread(mddev->thread);
1544 }
1543 } 1545 }
1544 1546
1545 r1_bio_write_done(r1_bio); 1547 r1_bio_write_done(r1_bio);
@@ -3197,7 +3199,7 @@ static int raid1_reshape(struct mddev *mddev)
3197 struct r1conf *conf = mddev->private; 3199 struct r1conf *conf = mddev->private;
3198 int cnt, raid_disks; 3200 int cnt, raid_disks;
3199 unsigned long flags; 3201 unsigned long flags;
3200 int d, d2, err; 3202 int d, d2;
3201 3203
3202 /* Cannot change chunk_size, layout, or level */ 3204 /* Cannot change chunk_size, layout, or level */
3203 if (mddev->chunk_sectors != mddev->new_chunk_sectors || 3205 if (mddev->chunk_sectors != mddev->new_chunk_sectors ||
@@ -3209,11 +3211,8 @@ static int raid1_reshape(struct mddev *mddev)
3209 return -EINVAL; 3211 return -EINVAL;
3210 } 3212 }
3211 3213
3212 if (!mddev_is_clustered(mddev)) { 3214 if (!mddev_is_clustered(mddev))
3213 err = md_allow_write(mddev); 3215 md_allow_write(mddev);
3214 if (err)
3215 return err;
3216 }
3217 3216
3218 raid_disks = mddev->raid_disks + mddev->delta_disks; 3217 raid_disks = mddev->raid_disks + mddev->delta_disks;
3219 3218