[PATCH 5/5] md: add bitmap_abort label in md_run

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxx>
Signed-off-by: Guoqing Jiang <gqjiang@xxxxxxxx>
---
 drivers/md/md.c | 26 ++++++++++----------------
 1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 7bab12a8d237..20db60a04145 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -5673,15 +5673,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;
@@ -5697,13 +5690,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;
 			}
 		}
 	}
@@ -5769,6 +5756,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);
-- 
2.12.3




[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux