From: majianpeng <majianpeng@gmail.com>
Date: Sun, 1 Apr 2012 23:48:38 +0000 (+1000)
Subject: md/raid1: If md_integrity_register() failed,run() must free the mem
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=5220ea1e640869e70f894837678315c878c651fd;p=linux.git

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>
---

diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 4a40a200d7696..242440831b23a 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -2636,11 +2636,13 @@ static struct r1conf *setup_conf(struct mddev *mddev)
 	return ERR_PTR(err);
 }
 
+static int stop(struct mddev *mddev);
 static int run(struct mddev *mddev)
 {
 	struct r1conf *conf;
 	int i;
 	struct md_rdev *rdev;
+	int ret;
 
 	if (mddev->level != 1) {
 		printk(KERN_ERR "md/raid1:%s: raid level not set to mirroring (%d)\n",
@@ -2705,7 +2707,11 @@ static int run(struct mddev *mddev)
 		mddev->queue->backing_dev_info.congested_data = mddev;
 		blk_queue_merge_bvec(mddev->queue, raid1_mergeable_bvec);
 	}
-	return md_integrity_register(mddev);
+
+	ret =  md_integrity_register(mddev);
+	if (ret)
+		stop(mddev);
+	return ret;
 }
 
 static int stop(struct mddev *mddev)