All of lore.kernel.org
 help / color / mirror / Atom feed
* minor md cleanups
@ 2022-11-29 13:32 Christoph Hellwig
  2022-11-29 13:32 ` [PATCH 1/3] md: remove lock_bdev / unlock_bdev Christoph Hellwig
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Christoph Hellwig @ 2022-11-29 13:32 UTC (permalink / raw)
  To: Song Liu; +Cc: linux-raid

Hi Song,

this small series has a few random md cleanups.

Diffstat:
 md.c |   97 ++++++++++++++++++++++++-------------------------------------------
 md.h |    1 
 2 files changed, 36 insertions(+), 62 deletions(-)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] md: remove lock_bdev / unlock_bdev
  2022-11-29 13:32 minor md cleanups Christoph Hellwig
@ 2022-11-29 13:32 ` Christoph Hellwig
  2022-11-29 13:32 ` [PATCH 2/3] md: mark md_kick_rdev_from_array static Christoph Hellwig
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Christoph Hellwig @ 2022-11-29 13:32 UTC (permalink / raw)
  To: Song Liu; +Cc: linux-raid

These wrappers for blkdev_get / blkdev_put just horribly confuse the
code with their odd naming.  Remove them and improve the error unwinding
in md_import_device with the now folded code.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/md/md.c | 63 +++++++++++++++++--------------------------------
 1 file changed, 22 insertions(+), 41 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index f95b8644048597..27ce98b018aff9 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2493,34 +2493,6 @@ static void unbind_rdev_from_array(struct md_rdev *rdev)
 	queue_work(md_rdev_misc_wq, &rdev->del_work);
 }
 
-/*
- * prevent the device from being mounted, repartitioned or
- * otherwise reused by a RAID array (or any other kernel
- * subsystem), by bd_claiming the device.
- */
-static int lock_rdev(struct md_rdev *rdev, dev_t dev, int shared)
-{
-	int err = 0;
-	struct block_device *bdev;
-
-	bdev = blkdev_get_by_dev(dev, FMODE_READ|FMODE_WRITE|FMODE_EXCL,
-				 shared ? (struct md_rdev *)lock_rdev : rdev);
-	if (IS_ERR(bdev)) {
-		pr_warn("md: could not open device unknown-block(%u,%u).\n",
-			MAJOR(dev), MINOR(dev));
-		return PTR_ERR(bdev);
-	}
-	rdev->bdev = bdev;
-	return err;
-}
-
-static void unlock_rdev(struct md_rdev *rdev)
-{
-	struct block_device *bdev = rdev->bdev;
-	rdev->bdev = NULL;
-	blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL);
-}
-
 void md_autodetect_dev(dev_t dev);
 
 static void export_rdev(struct md_rdev *rdev)
@@ -2531,7 +2503,8 @@ static void export_rdev(struct md_rdev *rdev)
 	if (test_bit(AutoDetected, &rdev->flags))
 		md_autodetect_dev(rdev->bdev->bd_dev);
 #endif
-	unlock_rdev(rdev);
+	blkdev_put(rdev->bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
+	rdev->bdev = NULL;
 	kobject_put(&rdev->kobj);
 }
 
@@ -3675,9 +3648,10 @@ EXPORT_SYMBOL_GPL(md_rdev_init);
  */
 static struct md_rdev *md_import_device(dev_t newdev, int super_format, int super_minor)
 {
-	int err;
+	static struct md_rdev *claim_rdev; /* just for claiming the bdev */
 	struct md_rdev *rdev;
 	sector_t size;
+	int err;
 
 	rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
 	if (!rdev)
@@ -3685,14 +3659,20 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe
 
 	err = md_rdev_init(rdev);
 	if (err)
-		goto abort_free;
+		goto out_free_rdev;
 	err = alloc_disk_sb(rdev);
 	if (err)
-		goto abort_free;
+		goto out_clear_rdev;
 
-	err = lock_rdev(rdev, newdev, super_format == -2);
-	if (err)
-		goto abort_free;
+	rdev->bdev = blkdev_get_by_dev(newdev,
+			FMODE_READ | FMODE_WRITE | FMODE_EXCL,
+			super_format == -2 ? claim_rdev : rdev);
+	if (IS_ERR(rdev->bdev)) {
+		pr_warn("md: could not open device unknown-block(%u,%u).\n",
+			MAJOR(newdev), MINOR(newdev));
+		err = PTR_ERR(rdev->bdev);
+		goto out_clear_rdev;
+	}
 
 	kobject_init(&rdev->kobj, &rdev_ktype);
 
@@ -3701,7 +3681,7 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe
 		pr_warn("md: %pg has zero or unknown size, marking faulty!\n",
 			rdev->bdev);
 		err = -EINVAL;
-		goto abort_free;
+		goto out_blkdev_put;
 	}
 
 	if (super_format >= 0) {
@@ -3711,21 +3691,22 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe
 			pr_warn("md: %pg does not have a valid v%d.%d superblock, not importing!\n",
 				rdev->bdev,
 				super_format, super_minor);
-			goto abort_free;
+			goto out_blkdev_put;
 		}
 		if (err < 0) {
 			pr_warn("md: could not read %pg's sb, not importing!\n",
 				rdev->bdev);
-			goto abort_free;
+			goto out_blkdev_put;
 		}
 	}
 
 	return rdev;
 
-abort_free:
-	if (rdev->bdev)
-		unlock_rdev(rdev);
+out_blkdev_put:
+	blkdev_put(rdev->bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
+out_clear_rdev:
 	md_rdev_clear(rdev);
+out_free_rdev:
 	kfree(rdev);
 	return ERR_PTR(err);
 }
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] md: mark md_kick_rdev_from_array static
  2022-11-29 13:32 minor md cleanups Christoph Hellwig
  2022-11-29 13:32 ` [PATCH 1/3] md: remove lock_bdev / unlock_bdev Christoph Hellwig
@ 2022-11-29 13:32 ` Christoph Hellwig
  2022-11-29 13:32 ` [PATCH 3/3] md: fold unbind_rdev_from_array into md_kick_rdev_from_array Christoph Hellwig
  2022-11-29 19:47 ` minor md cleanups Song Liu
  3 siblings, 0 replies; 5+ messages in thread
From: Christoph Hellwig @ 2022-11-29 13:32 UTC (permalink / raw)
  To: Song Liu; +Cc: linux-raid

md_kick_rdev_from_array is only used in md.c, so unexport it and mark
the symbol static.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/md/md.c | 3 +--
 drivers/md/md.h | 1 -
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 27ce98b018aff9..94adb403946534 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2508,12 +2508,11 @@ static void export_rdev(struct md_rdev *rdev)
 	kobject_put(&rdev->kobj);
 }
 
-void md_kick_rdev_from_array(struct md_rdev *rdev)
+static void md_kick_rdev_from_array(struct md_rdev *rdev)
 {
 	unbind_rdev_from_array(rdev);
 	export_rdev(rdev);
 }
-EXPORT_SYMBOL_GPL(md_kick_rdev_from_array);
 
 static void export_array(struct mddev *mddev)
 {
diff --git a/drivers/md/md.h b/drivers/md/md.h
index b4e2d8b87b6113..554a9026669ad9 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -782,7 +782,6 @@ extern void mddev_resume(struct mddev *mddev);
 
 extern void md_reload_sb(struct mddev *mddev, int raid_disk);
 extern void md_update_sb(struct mddev *mddev, int force);
-extern void md_kick_rdev_from_array(struct md_rdev * rdev);
 extern void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
 				     bool is_suspend);
 extern void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] md: fold unbind_rdev_from_array into md_kick_rdev_from_array
  2022-11-29 13:32 minor md cleanups Christoph Hellwig
  2022-11-29 13:32 ` [PATCH 1/3] md: remove lock_bdev / unlock_bdev Christoph Hellwig
  2022-11-29 13:32 ` [PATCH 2/3] md: mark md_kick_rdev_from_array static Christoph Hellwig
@ 2022-11-29 13:32 ` Christoph Hellwig
  2022-11-29 19:47 ` minor md cleanups Song Liu
  3 siblings, 0 replies; 5+ messages in thread
From: Christoph Hellwig @ 2022-11-29 13:32 UTC (permalink / raw)
  To: Song Liu; +Cc: linux-raid

unbind_rdev_from_array is only called from md_kick_rdev_from_array, so
merge it into its only caller.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/md/md.c | 37 ++++++++++++++++---------------------
 1 file changed, 16 insertions(+), 21 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 94adb403946534..775f1dde190a2e 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2468,7 +2468,22 @@ static void rdev_delayed_delete(struct work_struct *ws)
 	kobject_put(&rdev->kobj);
 }
 
-static void unbind_rdev_from_array(struct md_rdev *rdev)
+void md_autodetect_dev(dev_t dev);
+
+static void export_rdev(struct md_rdev *rdev)
+{
+	pr_debug("md: export_rdev(%pg)\n", rdev->bdev);
+	md_rdev_clear(rdev);
+#ifndef MODULE
+	if (test_bit(AutoDetected, &rdev->flags))
+		md_autodetect_dev(rdev->bdev->bd_dev);
+#endif
+	blkdev_put(rdev->bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
+	rdev->bdev = NULL;
+	kobject_put(&rdev->kobj);
+}
+
+static void md_kick_rdev_from_array(struct md_rdev *rdev)
 {
 	bd_unlink_disk_holder(rdev->bdev, rdev->mddev->gendisk);
 	list_del_rcu(&rdev->same_set);
@@ -2491,26 +2506,6 @@ static void unbind_rdev_from_array(struct md_rdev *rdev)
 	INIT_WORK(&rdev->del_work, rdev_delayed_delete);
 	kobject_get(&rdev->kobj);
 	queue_work(md_rdev_misc_wq, &rdev->del_work);
-}
-
-void md_autodetect_dev(dev_t dev);
-
-static void export_rdev(struct md_rdev *rdev)
-{
-	pr_debug("md: export_rdev(%pg)\n", rdev->bdev);
-	md_rdev_clear(rdev);
-#ifndef MODULE
-	if (test_bit(AutoDetected, &rdev->flags))
-		md_autodetect_dev(rdev->bdev->bd_dev);
-#endif
-	blkdev_put(rdev->bdev, FMODE_READ | FMODE_WRITE | FMODE_EXCL);
-	rdev->bdev = NULL;
-	kobject_put(&rdev->kobj);
-}
-
-static void md_kick_rdev_from_array(struct md_rdev *rdev)
-{
-	unbind_rdev_from_array(rdev);
 	export_rdev(rdev);
 }
 
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: minor md cleanups
  2022-11-29 13:32 minor md cleanups Christoph Hellwig
                   ` (2 preceding siblings ...)
  2022-11-29 13:32 ` [PATCH 3/3] md: fold unbind_rdev_from_array into md_kick_rdev_from_array Christoph Hellwig
@ 2022-11-29 19:47 ` Song Liu
  3 siblings, 0 replies; 5+ messages in thread
From: Song Liu @ 2022-11-29 19:47 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: linux-raid

On Tue, Nov 29, 2022 at 5:33 AM Christoph Hellwig <hch@lst.de> wrote:
>
> Hi Song,
>
> this small series has a few random md cleanups.

Applied to md-next. Thanks!

Song

>
> Diffstat:
>  md.c |   97 ++++++++++++++++++++++++-------------------------------------------
>  md.h |    1
>  2 files changed, 36 insertions(+), 62 deletions(-)

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-11-29 19:48 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-29 13:32 minor md cleanups Christoph Hellwig
2022-11-29 13:32 ` [PATCH 1/3] md: remove lock_bdev / unlock_bdev Christoph Hellwig
2022-11-29 13:32 ` [PATCH 2/3] md: mark md_kick_rdev_from_array static Christoph Hellwig
2022-11-29 13:32 ` [PATCH 3/3] md: fold unbind_rdev_from_array into md_kick_rdev_from_array Christoph Hellwig
2022-11-29 19:47 ` minor md cleanups Song Liu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.