summaryrefslogtreecommitdiff
path: root/drivers/md/md.c
diff options
context:
space:
mode:
authorGuoqing Jiang <gqjiang@suse.com>2019-06-14 12:10:39 +0300
committerSong Liu <songliubraving@fb.com>2019-06-21 02:36:00 +0300
commitd494549ac8852ec42854d1491dd17bb9350a0abc (patch)
tree7c6c9932d861743623cf9d74d287a7042be71799 /drivers/md/md.c
parent617b194a13c0f3b0a6d14fc6227c222877c23b4e (diff)
downloadlinux-d494549ac8852ec42854d1491dd17bb9350a0abc.tar.xz
md: add bitmap_abort label in md_run
Now, there are two places need to consider about the failure of destroy bitmap, so move the common part between bitmap_abort and abort label. Reviewed-by: NeilBrown <neilb@suse.com> Signed-off-by: Guoqing Jiang <gqjiang@suse.com> Signed-off-by: Song Liu <songliubraving@fb.com>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index b43207ab00b2..692fc365e73c 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -5666,15 +5666,8 @@ int md_run(struct mddev *mddev)
mddev->bitmap = bitmap;
}
- if (err) {
- mddev_detach(mddev);
- if (mddev->private)
- pers->free(mddev, mddev->private);
- mddev->private = NULL;
- module_put(pers->owner);
- md_bitmap_destroy(mddev);
- goto abort;
- }
+ if (err)
+ goto bitmap_abort;
if (mddev->bitmap_info.max_write_behind > 0) {
bool creat_pool = false;
@@ -5690,13 +5683,7 @@ int md_run(struct mddev *mddev)
sizeof(struct wb_info));
if (!mddev->wb_info_pool) {
err = -ENOMEM;
- mddev_detach(mddev);
- if (mddev->private)
- pers->free(mddev, mddev->private);
- mddev->private = NULL;
- module_put(pers->owner);
- md_bitmap_destroy(mddev);
- goto abort;
+ goto bitmap_abort;
}
}
}
@@ -5761,6 +5748,13 @@ int md_run(struct mddev *mddev)
sysfs_notify(&mddev->kobj, NULL, "degraded");
return 0;
+bitmap_abort:
+ mddev_detach(mddev);
+ if (mddev->private)
+ pers->free(mddev, mddev->private);
+ mddev->private = NULL;
+ module_put(pers->owner);
+ md_bitmap_destroy(mddev);
abort:
bioset_exit(&mddev->bio_set);
bioset_exit(&mddev->sync_set);