md/raid1: If md_integrity_register() failed,run() must free the mem
From 8a7f9d02f3e7151ecfd05ca9b1734d6e62414c03 Mon Sep 17 00:00:00 2001
From: majianpeng <[email protected]>
Date: Fri, 23 Mar 2012 10:25:41 +0800
Subject: [PATCH] md/raid1: If md_integrity_register() failed,run() must free
the mem.
Signed-off-by majianpeng <[email protected]>
--- drivers/md/raid1.c | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletions(-)
drivers/md/raid1.c +13 -1
@@ -2641,6 +2641,7 @@ 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 +2706,18 @@ 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) { +md_unregister_thread (&mddev->thread); +if (conf->r1bio_pool) +mempool_destroy (conf->r1bio_pool); +kfree (conf->mirrors); +kfree (conf->poolinfo); +kfree (conf); + mddev->private =NULL ; + } +return ret; }static int stop (struct mddev *mddev)
Signature · 6 lines
1.7.5.4 -------------- majianpeng 2012-03-23
NeilBrown
AppliedQuoted 34 lines · On Fri, 23 Mar 2012 10:30:59 +0800 "majianpeng" <[email protected]> wrote:
Quoted 1 line
From
8a7f9d02f3e7151ecfd05ca9b1734d6e62414c03Mon Sep 17 00:00:00 2001From: majianpeng <[email protected]>
Date: Fri, 23 Mar 2012 10:25:41 +0800
Subject: [PATCH] md/raid1: Ifmd_integrity_register()failed,run() must free
the mem.Signed-off-by majianpeng <[email protected]>--- drivers/md/raid1.c | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletions(-)drivers/md/raid1.c +6
-1@@ -2641,6 +2641,7 @@ 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 +2706,18 @@ 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) { +md_unregister_thread (&mddev->thread); +if (conf->r1bio_pool)
drivers/md/raid1.c static int run(struct mddev *mddev) · line 2723
Quoted 10 lines
drivers/md/raid1.c +7
-0+mempool_destroy (conf->r1bio_pool); +kfree (conf->mirrors); +kfree (conf->poolinfo); +kfree (conf); + mddev->private =NULL ; + } +return ret; }static int stop (struct mddev *mddev)
applied, thanks.
Again, I changed it to just call 'stop' instead of duplicating the code.
NeilBrown