Hannes Reinecke 6aebec
From: Luis Chamberlain <mcgrof@kernel.org>
Hannes Reinecke 6aebec
Date: Wed, 1 Sep 2021 13:38:30 +0200
Hannes Reinecke 6aebec
Subject: [PATCH] md: add error handling support for add_disk()
Hannes Reinecke 6aebec
Git-commit: 9be68dd7ac0e13be2ac57770c1f921d6b3294c6e
Hannes Reinecke 6aebec
Patch-mainline: v5.16-rc1
Hannes Reinecke 6aebec
References: jsc#PED-1183
Hannes Reinecke 6aebec
Hannes Reinecke 6aebec
We never checked for errors on add_disk() as this function
Hannes Reinecke 6aebec
returned void. Now that this is fixed, use the shiny new
Hannes Reinecke 6aebec
error handling.
Hannes Reinecke 6aebec
Hannes Reinecke 6aebec
We just do the unwinding of what was not done before, and are
Hannes Reinecke 6aebec
sure to unlock prior to bailing.
Hannes Reinecke 6aebec
Hannes Reinecke 6aebec
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Hannes Reinecke 6aebec
Signed-off-by: Christoph Hellwig <hch@lst.de>
Hannes Reinecke 6aebec
Signed-off-by: Song Liu <songliubraving@fb.com>
Hannes Reinecke 6aebec
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Hannes Reinecke 6aebec
Acked-by: Hannes Reinecke <hare@suse.com>
Hannes Reinecke 6aebec
---
Hannes Reinecke 6aebec
 drivers/md/md.c | 6 +++++-
Hannes Reinecke 6aebec
 1 file changed, 5 insertions(+), 1 deletion(-)
Hannes Reinecke 6aebec
Hannes Reinecke 6aebec
diff --git a/drivers/md/md.c b/drivers/md/md.c
Hannes Reinecke 6aebec
index 22310d5d8d41..eff3d23e1fcd 100644
Hannes Reinecke 6aebec
--- a/drivers/md/md.c
Hannes Reinecke 6aebec
+++ b/drivers/md/md.c
Hannes Reinecke 6aebec
@@ -5700,7 +5700,11 @@ static int md_alloc(dev_t dev, char *name)
Hannes Reinecke 6aebec
 	disk->flags |= GENHD_FL_EXT_DEVT;
Hannes Reinecke 6aebec
 	disk->events |= DISK_EVENT_MEDIA_CHANGE;
Hannes Reinecke 6aebec
 	mddev->gendisk = disk;
Hannes Reinecke 6aebec
-	add_disk(disk);
Hannes Reinecke 6aebec
+	error = add_disk(disk);
Hannes Reinecke 6aebec
+	if (error) {
Hannes Reinecke 6aebec
+		blk_cleanup_disk(disk);
Hannes Reinecke 6aebec
+		goto abort;
Hannes Reinecke 6aebec
+	}
Hannes Reinecke 6aebec
 
Hannes Reinecke 6aebec
 	error = kobject_add(&mddev->kobj, &disk_to_dev(disk)->kobj, "%s", "md");
Hannes Reinecke 6aebec
 	if (error) {
Hannes Reinecke 6aebec
-- 
Hannes Reinecke 6aebec
2.35.3
Hannes Reinecke 6aebec