summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2014-08-08 13:26:26 +1000
committerStephen Rothwell <sfr@canb.auug.org.au>2014-08-08 13:26:26 +1000
commit6f16ab1cafee90dc638f30b2d0a59702c1ce4ed5 (patch)
tree243f4b8d64060178e6b9ae3c4f7ad126ceb456e8
parent617bb7ba54f8297b6e90bf0195c793b186edf2ab (diff)
parent1bdb20e16166240a4ca3b861c48defefaf218874 (diff)
Merge remote-tracking branch 'md/for-next'
-rw-r--r--drivers/md/md.c10
-rw-r--r--drivers/md/raid1.c8
-rw-r--r--drivers/md/raid10.c11
3 files changed, 17 insertions, 12 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 32fc19c540d4..3bd13b276e45 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -3500,6 +3500,12 @@ level_store(struct mddev *mddev, const char *buf, size_t len)
mdname(mddev), clevel);
return -EINVAL;
}
+ if (mddev->bitmap && !pers->quiesce) {
+ module_put(pers->owner);
+ printk(KERN_WARNING "md: %s: %s does not support a bitmap\n",
+ mdname(mddev), clevel);
+ return -EINVAL;
+ }
rdev_for_each(rdev, mddev)
rdev->new_raid_disk = rdev->raid_disk;
@@ -8592,7 +8598,7 @@ static int __init md_init(void)
goto err_mdp;
mdp_major = ret;
- blk_register_region(MKDEV(MD_MAJOR, 0), 1UL<<MINORBITS, THIS_MODULE,
+ blk_register_region(MKDEV(MD_MAJOR, 0), 512, THIS_MODULE,
md_probe, NULL, NULL);
blk_register_region(MKDEV(mdp_major, 0), 1UL<<MINORBITS, THIS_MODULE,
md_probe, NULL, NULL);
@@ -8687,7 +8693,7 @@ static __exit void md_exit(void)
struct list_head *tmp;
int delay = 1;
- blk_unregister_region(MKDEV(MD_MAJOR,0), 1U << MINORBITS);
+ blk_unregister_region(MKDEV(MD_MAJOR,0), 512);
blk_unregister_region(MKDEV(mdp_major,0), 1U << MINORBITS);
unregister_blkdev(MD_MAJOR,"md");
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)
mddev->degraded++;
set_bit(Faulty, &rdev->flags);
spin_unlock_irqrestore(&conf->device_lock, flags);
- /*
- * if recovery is running, make sure it aborts.
- */
- set_bit(MD_RECOVERY_INTR, &mddev->recovery);
} else
set_bit(Faulty, &rdev->flags);
+ /*
+ * if recovery is running, make sure it aborts.
+ */
+ set_bit(MD_RECOVERY_INTR, &mddev->recovery);
set_bit(MD_CHANGE_DEVS, &mddev->flags);
printk(KERN_ALERT
"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)
spin_unlock_irqrestore(&conf->device_lock, flags);
return;
}
- if (test_and_clear_bit(In_sync, &rdev->flags)) {
+ if (test_and_clear_bit(In_sync, &rdev->flags))
mddev->degraded++;
- /*
- * if recovery is running, make sure it aborts.
- */
- set_bit(MD_RECOVERY_INTR, &mddev->recovery);
- }
+ /*
+ * If recovery is running, make sure it aborts.
+ */
+ set_bit(MD_RECOVERY_INTR, &mddev->recovery);
set_bit(Blocked, &rdev->flags);
set_bit(Faulty, &rdev->flags);
set_bit(MD_CHANGE_DEVS, &mddev->flags);