diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-11 10:02:35 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-08-11 10:02:35 -0400 |
| commit | 2213d7c29a434626a15ffb285182cd19ed0b722d (patch) | |
| tree | 6df63cbcb2b156d65dae698383cd2c6ebc0c4b5e | |
| parent | c8d6637d0497d62093dbba0694c7b3a80b79bfe1 (diff) | |
| parent | d66b1b395a59027a1c054e1fc57d582cb4194491 (diff) | |
Merge tag 'md/3.17' of git://neil.brown.name/md
Pull md updates from Neil Brown:
"Most interesting is that md devices (major == 9) with minor numbers of
512 or more will no longer be created simply by opening a block device
file. They can only be created by writing to
/sys/module/md_mod/parameters/new_array
The 'auto-create-on-open' semantic is cumbersome and we need to start
moving away from it"
* tag 'md/3.17' of git://neil.brown.name/md:
md: don't allow bitmap file to be added to raid0/linear.
md/raid0: check for bitmap compatability when changing raid levels.
md: Recovery speed is wrong
md: disable probing for md devices 512 and over.
md/raid1,raid10: always abort recover on write error.
| -rw-r--r-- | drivers/md/md.c | 13 | ||||
| -rw-r--r-- | drivers/md/raid0.c | 6 | ||||
| -rw-r--r-- | drivers/md/raid1.c | 8 | ||||
| -rw-r--r-- | drivers/md/raid10.c | 11 |
4 files changed, 22 insertions, 16 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 32fc19c540d4..1294238610df 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -5961,7 +5961,7 @@ static int set_bitmap_file(struct mddev *mddev, int fd) | |||
| 5961 | int err = 0; | 5961 | int err = 0; |
| 5962 | 5962 | ||
| 5963 | if (mddev->pers) { | 5963 | if (mddev->pers) { |
| 5964 | if (!mddev->pers->quiesce) | 5964 | if (!mddev->pers->quiesce || !mddev->thread) |
| 5965 | return -EBUSY; | 5965 | return -EBUSY; |
| 5966 | if (mddev->recovery || mddev->sync_thread) | 5966 | if (mddev->recovery || mddev->sync_thread) |
| 5967 | return -EBUSY; | 5967 | return -EBUSY; |
| @@ -6263,7 +6263,7 @@ static int update_array_info(struct mddev *mddev, mdu_array_info_t *info) | |||
| 6263 | rv = update_raid_disks(mddev, info->raid_disks); | 6263 | rv = update_raid_disks(mddev, info->raid_disks); |
| 6264 | 6264 | ||
| 6265 | if ((state ^ info->state) & (1<<MD_SB_BITMAP_PRESENT)) { | 6265 | if ((state ^ info->state) & (1<<MD_SB_BITMAP_PRESENT)) { |
| 6266 | if (mddev->pers->quiesce == NULL) | 6266 | if (mddev->pers->quiesce == NULL || mddev->thread == NULL) |
| 6267 | return -EINVAL; | 6267 | return -EINVAL; |
| 6268 | if (mddev->recovery || mddev->sync_thread) | 6268 | if (mddev->recovery || mddev->sync_thread) |
| 6269 | return -EBUSY; | 6269 | return -EBUSY; |
| @@ -7376,7 +7376,7 @@ void md_do_sync(struct md_thread *thread) | |||
| 7376 | struct mddev *mddev2; | 7376 | struct mddev *mddev2; |
| 7377 | unsigned int currspeed = 0, | 7377 | unsigned int currspeed = 0, |
| 7378 | window; | 7378 | window; |
| 7379 | sector_t max_sectors,j, io_sectors; | 7379 | sector_t max_sectors,j, io_sectors, recovery_done; |
| 7380 | unsigned long mark[SYNC_MARKS]; | 7380 | unsigned long mark[SYNC_MARKS]; |
| 7381 | unsigned long update_time; | 7381 | unsigned long update_time; |
| 7382 | sector_t mark_cnt[SYNC_MARKS]; | 7382 | sector_t mark_cnt[SYNC_MARKS]; |
| @@ -7652,7 +7652,8 @@ void md_do_sync(struct md_thread *thread) | |||
| 7652 | */ | 7652 | */ |
| 7653 | cond_resched(); | 7653 | cond_resched(); |
| 7654 | 7654 | ||
| 7655 | currspeed = ((unsigned long)(io_sectors-mddev->resync_mark_cnt))/2 | 7655 | recovery_done = io_sectors - atomic_read(&mddev->recovery_active); |
| 7656 | currspeed = ((unsigned long)(recovery_done - mddev->resync_mark_cnt))/2 | ||
| 7656 | /((jiffies-mddev->resync_mark)/HZ +1) +1; | 7657 | /((jiffies-mddev->resync_mark)/HZ +1) +1; |
| 7657 | 7658 | ||
| 7658 | if (currspeed > speed_min(mddev)) { | 7659 | if (currspeed > speed_min(mddev)) { |
| @@ -8592,7 +8593,7 @@ static int __init md_init(void) | |||
| 8592 | goto err_mdp; | 8593 | goto err_mdp; |
| 8593 | mdp_major = ret; | 8594 | mdp_major = ret; |
| 8594 | 8595 | ||
| 8595 | blk_register_region(MKDEV(MD_MAJOR, 0), 1UL<<MINORBITS, THIS_MODULE, | 8596 | blk_register_region(MKDEV(MD_MAJOR, 0), 512, THIS_MODULE, |
| 8596 | md_probe, NULL, NULL); | 8597 | md_probe, NULL, NULL); |
| 8597 | blk_register_region(MKDEV(mdp_major, 0), 1UL<<MINORBITS, THIS_MODULE, | 8598 | blk_register_region(MKDEV(mdp_major, 0), 1UL<<MINORBITS, THIS_MODULE, |
| 8598 | md_probe, NULL, NULL); | 8599 | md_probe, NULL, NULL); |
| @@ -8687,7 +8688,7 @@ static __exit void md_exit(void) | |||
| 8687 | struct list_head *tmp; | 8688 | struct list_head *tmp; |
| 8688 | int delay = 1; | 8689 | int delay = 1; |
| 8689 | 8690 | ||
| 8690 | blk_unregister_region(MKDEV(MD_MAJOR,0), 1U << MINORBITS); | 8691 | blk_unregister_region(MKDEV(MD_MAJOR,0), 512); |
| 8691 | blk_unregister_region(MKDEV(mdp_major,0), 1U << MINORBITS); | 8692 | blk_unregister_region(MKDEV(mdp_major,0), 1U << MINORBITS); |
| 8692 | 8693 | ||
| 8693 | unregister_blkdev(MD_MAJOR,"md"); | 8694 | unregister_blkdev(MD_MAJOR,"md"); |
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index 407a99e46f69..cf91f5910c7c 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c | |||
| @@ -685,6 +685,12 @@ static void *raid0_takeover(struct mddev *mddev) | |||
| 685 | * raid10 - assuming we have all necessary active disks | 685 | * raid10 - assuming we have all necessary active disks |
| 686 | * raid1 - with (N -1) mirror drives faulty | 686 | * raid1 - with (N -1) mirror drives faulty |
| 687 | */ | 687 | */ |
| 688 | |||
| 689 | if (mddev->bitmap) { | ||
| 690 | printk(KERN_ERR "md/raid0: %s: cannot takeover array with bitmap\n", | ||
| 691 | mdname(mddev)); | ||
| 692 | return ERR_PTR(-EBUSY); | ||
| 693 | } | ||
| 688 | if (mddev->level == 4) | 694 | if (mddev->level == 4) |
| 689 | return raid0_takeover_raid45(mddev); | 695 | return raid0_takeover_raid45(mddev); |
| 690 | 696 | ||
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 56e24c072b62..d7690f86fdb9 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
| @@ -1501,12 +1501,12 @@ static void error(struct mddev *mddev, struct md_rdev *rdev) | |||
| 1501 | mddev->degraded++; | 1501 | mddev->degraded++; |
| 1502 | set_bit(Faulty, &rdev->flags); | 1502 | set_bit(Faulty, &rdev->flags); |
| 1503 | spin_unlock_irqrestore(&conf->device_lock, flags); | 1503 | spin_unlock_irqrestore(&conf->device_lock, flags); |
| 1504 | /* | ||
| 1505 | * if recovery is running, make sure it aborts. | ||
| 1506 | */ | ||
| 1507 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | ||
| 1508 | } else | 1504 | } else |
| 1509 | set_bit(Faulty, &rdev->flags); | 1505 | set_bit(Faulty, &rdev->flags); |
| 1506 | /* | ||
| 1507 | * if recovery is running, make sure it aborts. | ||
| 1508 | */ | ||
| 1509 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | ||
| 1510 | set_bit(MD_CHANGE_DEVS, &mddev->flags); | 1510 | set_bit(MD_CHANGE_DEVS, &mddev->flags); |
| 1511 | printk(KERN_ALERT | 1511 | printk(KERN_ALERT |
| 1512 | "md/raid1:%s: Disk failure on %s, disabling device.\n" | 1512 | "md/raid1:%s: Disk failure on %s, disabling device.\n" |
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index cb882aae9e20..b08c18871323 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
| @@ -1684,13 +1684,12 @@ static void error(struct mddev *mddev, struct md_rdev *rdev) | |||
| 1684 | spin_unlock_irqrestore(&conf->device_lock, flags); | 1684 | spin_unlock_irqrestore(&conf->device_lock, flags); |
| 1685 | return; | 1685 | return; |
| 1686 | } | 1686 | } |
| 1687 | if (test_and_clear_bit(In_sync, &rdev->flags)) { | 1687 | if (test_and_clear_bit(In_sync, &rdev->flags)) |
| 1688 | mddev->degraded++; | 1688 | mddev->degraded++; |
| 1689 | /* | 1689 | /* |
| 1690 | * if recovery is running, make sure it aborts. | 1690 | * If recovery is running, make sure it aborts. |
| 1691 | */ | 1691 | */ |
| 1692 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); | 1692 | set_bit(MD_RECOVERY_INTR, &mddev->recovery); |
| 1693 | } | ||
| 1694 | set_bit(Blocked, &rdev->flags); | 1693 | set_bit(Blocked, &rdev->flags); |
| 1695 | set_bit(Faulty, &rdev->flags); | 1694 | set_bit(Faulty, &rdev->flags); |
| 1696 | set_bit(MD_CHANGE_DEVS, &mddev->flags); | 1695 | set_bit(MD_CHANGE_DEVS, &mddev->flags); |
