aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-08-11 10:02:35 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-11 10:02:35 -0400
commit2213d7c29a434626a15ffb285182cd19ed0b722d (patch)
tree6df63cbcb2b156d65dae698383cd2c6ebc0c4b5e
parentc8d6637d0497d62093dbba0694c7b3a80b79bfe1 (diff)
parentd66b1b395a59027a1c054e1fc57d582cb4194491 (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.c13
-rw-r--r--drivers/md/raid0.c6
-rw-r--r--drivers/md/raid1.c8
-rw-r--r--drivers/md/raid10.c11
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);