aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid1.c
diff options
context:
space:
mode:
authormajianpeng <majianpeng@gmail.com>2012-04-01 19:48:38 -0400
committerNeilBrown <neilb@suse.de>2012-04-01 19:48:38 -0400
commit5220ea1e640869e70f894837678315c878c651fd (patch)
treeb18af9d438b634e81bd5d87c2323ae58d52eaf73 /drivers/md/raid1.c
parent0366ef847581d692e197b88825867ca9ee00e358 (diff)
md/raid1: If md_integrity_register() failed,run() must free the mem
Signed-off-by: majianpeng <majianpeng@gmail.com> Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/raid1.c')
-rw-r--r--drivers/md/raid1.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 4a40a200d769..242440831b23 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -2636,11 +2636,13 @@ static struct r1conf *setup_conf(struct mddev *mddev)
2636 return ERR_PTR(err); 2636 return ERR_PTR(err);
2637} 2637}
2638 2638
2639static int stop(struct mddev *mddev);
2639static int run(struct mddev *mddev) 2640static int run(struct mddev *mddev)
2640{ 2641{
2641 struct r1conf *conf; 2642 struct r1conf *conf;
2642 int i; 2643 int i;
2643 struct md_rdev *rdev; 2644 struct md_rdev *rdev;
2645 int ret;
2644 2646
2645 if (mddev->level != 1) { 2647 if (mddev->level != 1) {
2646 printk(KERN_ERR "md/raid1:%s: raid level not set to mirroring (%d)\n", 2648 printk(KERN_ERR "md/raid1:%s: raid level not set to mirroring (%d)\n",
@@ -2705,7 +2707,11 @@ static int run(struct mddev *mddev)
2705 mddev->queue->backing_dev_info.congested_data = mddev; 2707 mddev->queue->backing_dev_info.congested_data = mddev;
2706 blk_queue_merge_bvec(mddev->queue, raid1_mergeable_bvec); 2708 blk_queue_merge_bvec(mddev->queue, raid1_mergeable_bvec);
2707 } 2709 }
2708 return md_integrity_register(mddev); 2710
2711 ret = md_integrity_register(mddev);
2712 if (ret)
2713 stop(mddev);
2714 return ret;
2709} 2715}
2710 2716
2711static int stop(struct mddev *mddev) 2717static int stop(struct mddev *mddev)