diff options
author | majianpeng <majianpeng@gmail.com> | 2012-04-01 19:48:38 -0400 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2012-04-01 19:48:38 -0400 |
commit | 5220ea1e640869e70f894837678315c878c651fd (patch) | |
tree | b18af9d438b634e81bd5d87c2323ae58d52eaf73 /drivers | |
parent | 0366ef847581d692e197b88825867ca9ee00e358 (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')
-rw-r--r-- | drivers/md/raid1.c | 8 |
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 | ||
2639 | static int stop(struct mddev *mddev); | ||
2639 | static int run(struct mddev *mddev) | 2640 | static 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 | ||
2711 | static int stop(struct mddev *mddev) | 2717 | static int stop(struct mddev *mddev) |