aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/md/raid5.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index a9604d4392ee..122702d957a6 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -6663,6 +6663,7 @@ static int run(struct mddev *mddev)
6663 int working_disks = 0; 6663 int working_disks = 0;
6664 int dirty_parity_disks = 0; 6664 int dirty_parity_disks = 0;
6665 struct md_rdev *rdev; 6665 struct md_rdev *rdev;
6666 struct md_rdev *journal_dev = NULL;
6666 sector_t reshape_offset = 0; 6667 sector_t reshape_offset = 0;
6667 int i; 6668 int i;
6668 long long min_offset_diff = 0; 6669 long long min_offset_diff = 0;
@@ -6675,6 +6676,9 @@ static int run(struct mddev *mddev)
6675 6676
6676 rdev_for_each(rdev, mddev) { 6677 rdev_for_each(rdev, mddev) {
6677 long long diff; 6678 long long diff;
6679
6680 if (test_bit(Journal, &rdev->flags))
6681 journal_dev = rdev;
6678 if (rdev->raid_disk < 0) 6682 if (rdev->raid_disk < 0)
6679 continue; 6683 continue;
6680 diff = (rdev->new_data_offset - rdev->data_offset); 6684 diff = (rdev->new_data_offset - rdev->data_offset);
@@ -6708,6 +6712,12 @@ static int run(struct mddev *mddev)
6708 int chunk_sectors; 6712 int chunk_sectors;
6709 int new_data_disks; 6713 int new_data_disks;
6710 6714
6715 if (journal_dev) {
6716 printk(KERN_ERR "md/raid:%s: don't support reshape with journal - aborting.\n",
6717 mdname(mddev));
6718 return -EINVAL;
6719 }
6720
6711 if (mddev->new_level != mddev->level) { 6721 if (mddev->new_level != mddev->level) {
6712 printk(KERN_ERR "md/raid:%s: unsupported reshape " 6722 printk(KERN_ERR "md/raid:%s: unsupported reshape "
6713 "required - aborting.\n", 6723 "required - aborting.\n",
@@ -7218,6 +7228,8 @@ static int raid5_resize(struct mddev *mddev, sector_t sectors)
7218 sector_t newsize; 7228 sector_t newsize;
7219 struct r5conf *conf = mddev->private; 7229 struct r5conf *conf = mddev->private;
7220 7230
7231 if (conf->log)
7232 return -EINVAL;
7221 sectors &= ~((sector_t)conf->chunk_sectors - 1); 7233 sectors &= ~((sector_t)conf->chunk_sectors - 1);
7222 newsize = raid5_size(mddev, sectors, mddev->raid_disks); 7234 newsize = raid5_size(mddev, sectors, mddev->raid_disks);
7223 if (mddev->external_size && 7235 if (mddev->external_size &&
@@ -7269,6 +7281,8 @@ static int check_reshape(struct mddev *mddev)
7269{ 7281{
7270 struct r5conf *conf = mddev->private; 7282 struct r5conf *conf = mddev->private;
7271 7283
7284 if (conf->log)
7285 return -EINVAL;
7272 if (mddev->delta_disks == 0 && 7286 if (mddev->delta_disks == 0 &&
7273 mddev->new_layout == mddev->layout && 7287 mddev->new_layout == mddev->layout &&
7274 mddev->new_chunk_sectors == mddev->chunk_sectors) 7288 mddev->new_chunk_sectors == mddev->chunk_sectors)