diff options
-rw-r--r-- | drivers/md/raid5.c | 14 |
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) |