All of lore.kernel.org
 help / color / mirror / Atom feed
* md device allocation cleanups
@ 2022-07-23  6:24 Christoph Hellwig
  2022-07-23  6:24 ` [PATCH 1/2] md: open code md_probe in autorun_devices Christoph Hellwig
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Christoph Hellwig @ 2022-07-23  6:24 UTC (permalink / raw)
  To: Song Liu; +Cc: Logan Gunthorpe, linux-raid

Hi all,

this small series cleans up the mddev allocation a bit by returning
the structure to callers that want it instead of requiring another
lookup.

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

* [PATCH 1/2] md: open code md_probe in autorun_devices
  2022-07-23  6:24 md device allocation cleanups Christoph Hellwig
@ 2022-07-23  6:24 ` Christoph Hellwig
  2022-07-25  6:26   ` Hannes Reinecke
  2022-07-23  6:24 ` [PATCH 2/2] md: return the allocated devices from md_alloc Christoph Hellwig
  2022-07-25 16:30 ` md device allocation cleanups Logan Gunthorpe
  2 siblings, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2022-07-23  6:24 UTC (permalink / raw)
  To: Song Liu; +Cc: Logan Gunthorpe, linux-raid

autorun_devices should not be limited to the controls for the legacy
probe on open, so just call md_alloc directly.

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

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 2b2267be5c329..5671160ad3982 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -6500,7 +6500,7 @@ static void autorun_devices(int part)
 			break;
 		}
 
-		md_probe(dev);
+		md_alloc(dev, NULL);
 		mddev = mddev_find(dev);
 		if (!mddev)
 			break;
-- 
2.30.2


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

* [PATCH 2/2] md: return the allocated devices from md_alloc
  2022-07-23  6:24 md device allocation cleanups Christoph Hellwig
  2022-07-23  6:24 ` [PATCH 1/2] md: open code md_probe in autorun_devices Christoph Hellwig
@ 2022-07-23  6:24 ` Christoph Hellwig
  2022-07-25  6:27   ` Hannes Reinecke
  2022-07-25 16:30 ` md device allocation cleanups Logan Gunthorpe
  2 siblings, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2022-07-23  6:24 UTC (permalink / raw)
  To: Song Liu; +Cc: Logan Gunthorpe, linux-raid

Two callers of md_alloc want to use the newly allocated devices, so
return it instead of letting them find it cumbersomely after the
allocation.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 drivers/md/md-autodetect.c | 22 +++++-----------
 drivers/md/md.c            | 54 ++++++++++++++++----------------------
 drivers/md/md.h            |  3 ++-
 3 files changed, 30 insertions(+), 49 deletions(-)

diff --git a/drivers/md/md-autodetect.c b/drivers/md/md-autodetect.c
index 344910ba435c5..91836e6de3260 100644
--- a/drivers/md/md-autodetect.c
+++ b/drivers/md/md-autodetect.c
@@ -125,7 +125,6 @@ static void __init md_setup_drive(struct md_setup_args *args)
 	char *devname = args->device_names;
 	dev_t devices[MD_SB_DISKS + 1], mdev;
 	struct mdu_array_info_s ainfo = { };
-	struct block_device *bdev;
 	struct mddev *mddev;
 	int err = 0, i;
 	char name[16];
@@ -169,25 +168,16 @@ static void __init md_setup_drive(struct md_setup_args *args)
 
 	pr_info("md: Loading %s: %s\n", name, args->device_names);
 
-	md_alloc(mdev, name);
-	bdev = blkdev_get_by_dev(mdev, FMODE_READ, NULL);
-	if (IS_ERR(bdev)) {
-		pr_err("md: open failed - cannot start array %s\n", name);
+	mddev = md_alloc(mdev, name);
+	if (IS_ERR(mddev)) {
+		pr_err("md: md_alloc failed - cannot start array %s\n", name);
 		return;
 	}
 
-	err = -EIO;
-	if (WARN(bdev->bd_disk->fops != &md_fops,
-			"Opening block device %x resulted in non-md device\n",
-			mdev))
-		goto out_blkdev_put;
-
-	mddev = bdev->bd_disk->private_data;
-
 	err = mddev_lock(mddev);
 	if (err) {
 		pr_err("md: failed to lock array %s\n", name);
-		goto out_blkdev_put;
+		goto out_mddev_put;
 	}
 
 	if (!list_empty(&mddev->disks) || mddev->raid_disks) {
@@ -231,8 +221,8 @@ static void __init md_setup_drive(struct md_setup_args *args)
 		pr_warn("md: starting %s failed\n", name);
 out_unlock:
 	mddev_unlock(mddev);
-out_blkdev_put:
-	blkdev_put(bdev, FMODE_READ);
+out_mddev_put:
+	mddev_put(mddev);
 }
 
 static int __init raid_setup(char *str)
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 5671160ad3982..6e82df21623d3 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -635,7 +635,7 @@ static inline struct mddev *mddev_get(struct mddev *mddev)
 
 static void mddev_delayed_delete(struct work_struct *ws);
 
-static void mddev_put(struct mddev *mddev)
+void mddev_put(struct mddev *mddev)
 {
 	if (!atomic_dec_and_lock(&mddev->active, &all_mddevs_lock))
 		return;
@@ -714,24 +714,6 @@ static dev_t mddev_alloc_unit(void)
 	return dev;
 }
 
-#ifndef MODULE
-static struct mddev *mddev_find(dev_t unit)
-{
-	struct mddev *mddev;
-
-	if (MAJOR(unit) != MD_MAJOR)
-		unit &= ~((1 << MdpMinorShift) - 1);
-
-	spin_lock(&all_mddevs_lock);
-	mddev = mddev_find_locked(unit);
-	if (mddev && !mddev_get(mddev))
-		mddev = NULL;
-	spin_unlock(&all_mddevs_lock);
-
-	return mddev;
-}
-#endif
-
 static struct mddev *mddev_alloc(dev_t unit)
 {
 	struct mddev *new;
@@ -5614,7 +5596,7 @@ int mddev_init_writes_pending(struct mddev *mddev)
 }
 EXPORT_SYMBOL_GPL(mddev_init_writes_pending);
 
-int md_alloc(dev_t dev, char *name)
+struct mddev *md_alloc(dev_t dev, char *name)
 {
 	/*
 	 * If dev is zero, name is the name of a device to allocate with
@@ -5706,17 +5688,16 @@ int md_alloc(dev_t dev, char *name)
 		 * different from a normal close on last release now.
 		 */
 		mddev->hold_active = 0;
-		goto done;
+		mutex_unlock(&disks_mutex);
+		mddev_put(mddev);
+		return ERR_PTR(error);
 	}
 
 	kobject_uevent(&mddev->kobj, KOBJ_ADD);
 	mddev->sysfs_state = sysfs_get_dirent_safe(mddev->kobj.sd, "array_state");
 	mddev->sysfs_level = sysfs_get_dirent_safe(mddev->kobj.sd, "level");
-
-done:
 	mutex_unlock(&disks_mutex);
-	mddev_put(mddev);
-	return error;
+	return mddev;
 
 out_put_disk:
 	put_disk(disk);
@@ -5724,7 +5705,17 @@ int md_alloc(dev_t dev, char *name)
 	mddev_free(mddev);
 out_unlock:
 	mutex_unlock(&disks_mutex);
-	return error;
+	return ERR_PTR(error);
+}
+
+static int md_alloc_and_put(dev_t dev, char *name)
+{
+	struct mddev *mddev = md_alloc(dev, name);
+
+	if (IS_ERR(mddev))
+		return PTR_ERR(mddev);
+	mddev_put(mddev);
+	return 0;
 }
 
 static void md_probe(dev_t dev)
@@ -5732,7 +5723,7 @@ static void md_probe(dev_t dev)
 	if (MAJOR(dev) == MD_MAJOR && MINOR(dev) >= 512)
 		return;
 	if (create_on_open)
-		md_alloc(dev, NULL);
+		md_alloc_and_put(dev, NULL);
 }
 
 static int add_named_array(const char *val, const struct kernel_param *kp)
@@ -5754,12 +5745,12 @@ static int add_named_array(const char *val, const struct kernel_param *kp)
 		return -E2BIG;
 	strscpy(buf, val, len+1);
 	if (strncmp(buf, "md_", 3) == 0)
-		return md_alloc(0, buf);
+		return md_alloc_and_put(0, buf);
 	if (strncmp(buf, "md", 2) == 0 &&
 	    isdigit(buf[2]) &&
 	    kstrtoul(buf+2, 10, &devnum) == 0 &&
 	    devnum <= MINORMASK)
-		return md_alloc(MKDEV(MD_MAJOR, devnum), NULL);
+		return md_alloc_and_put(MKDEV(MD_MAJOR, devnum), NULL);
 
 	return -EINVAL;
 }
@@ -6500,9 +6491,8 @@ static void autorun_devices(int part)
 			break;
 		}
 
-		md_alloc(dev, NULL);
-		mddev = mddev_find(dev);
-		if (!mddev)
+		mddev = md_alloc(dev, NULL);
+		if (IS_ERR(mddev))
 			break;
 
 		if (mddev_lock(mddev))
diff --git a/drivers/md/md.h b/drivers/md/md.h
index f6ab73c90b7d2..b4e2d8b87b611 100644
--- a/drivers/md/md.h
+++ b/drivers/md/md.h
@@ -767,7 +767,8 @@ extern int md_integrity_add_rdev(struct md_rdev *rdev, struct mddev *mddev);
 extern int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale);
 
 extern void mddev_init(struct mddev *mddev);
-int md_alloc(dev_t dev, char *name);
+struct mddev *md_alloc(dev_t dev, char *name);
+void mddev_put(struct mddev *mddev);
 extern int md_run(struct mddev *mddev);
 extern int md_start(struct mddev *mddev);
 extern void md_stop(struct mddev *mddev);
-- 
2.30.2


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

* Re: [PATCH 1/2] md: open code md_probe in autorun_devices
  2022-07-23  6:24 ` [PATCH 1/2] md: open code md_probe in autorun_devices Christoph Hellwig
@ 2022-07-25  6:26   ` Hannes Reinecke
  0 siblings, 0 replies; 7+ messages in thread
From: Hannes Reinecke @ 2022-07-25  6:26 UTC (permalink / raw)
  To: Christoph Hellwig, Song Liu; +Cc: Logan Gunthorpe, linux-raid

On 7/23/22 08:24, Christoph Hellwig wrote:
> autorun_devices should not be limited to the controls for the legacy
> probe on open, so just call md_alloc directly.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>   drivers/md/md.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/md/md.c b/drivers/md/md.c
> index 2b2267be5c329..5671160ad3982 100644
> --- a/drivers/md/md.c
> +++ b/drivers/md/md.c
> @@ -6500,7 +6500,7 @@ static void autorun_devices(int part)
>   			break;
>   		}
>   
> -		md_probe(dev);
> +		md_alloc(dev, NULL);
>   		mddev = mddev_find(dev);
>   		if (!mddev)
>   			break;
Reviewed-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		           Kernel Storage Architect
hare@suse.de			                  +49 911 74053 688
SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), GF: Felix Imendörffer

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

* Re: [PATCH 2/2] md: return the allocated devices from md_alloc
  2022-07-23  6:24 ` [PATCH 2/2] md: return the allocated devices from md_alloc Christoph Hellwig
@ 2022-07-25  6:27   ` Hannes Reinecke
  0 siblings, 0 replies; 7+ messages in thread
From: Hannes Reinecke @ 2022-07-25  6:27 UTC (permalink / raw)
  To: Christoph Hellwig, Song Liu; +Cc: Logan Gunthorpe, linux-raid

On 7/23/22 08:24, Christoph Hellwig wrote:
> Two callers of md_alloc want to use the newly allocated devices, so
> return it instead of letting them find it cumbersomely after the
> allocation.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
>   drivers/md/md-autodetect.c | 22 +++++-----------
>   drivers/md/md.c            | 54 ++++++++++++++++----------------------
>   drivers/md/md.h            |  3 ++-
>   3 files changed, 30 insertions(+), 49 deletions(-)
> 
Reviewed-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		           Kernel Storage Architect
hare@suse.de			                  +49 911 74053 688
SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), GF: Felix Imendörffer

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

* Re: md device allocation cleanups
  2022-07-23  6:24 md device allocation cleanups Christoph Hellwig
  2022-07-23  6:24 ` [PATCH 1/2] md: open code md_probe in autorun_devices Christoph Hellwig
  2022-07-23  6:24 ` [PATCH 2/2] md: return the allocated devices from md_alloc Christoph Hellwig
@ 2022-07-25 16:30 ` Logan Gunthorpe
  2022-07-26  5:15   ` Song Liu
  2 siblings, 1 reply; 7+ messages in thread
From: Logan Gunthorpe @ 2022-07-25 16:30 UTC (permalink / raw)
  To: Christoph Hellwig, Song Liu; +Cc: linux-raid



On 2022-07-23 00:24, Christoph Hellwig wrote:
> Hi all,
> 
> this small series cleans up the mddev allocation a bit by returning
> the structure to callers that want it instead of requiring another
> lookup.

I've reviewed and tested these two patches and they look good to me.

Reviewed-by: Logan Gunthorpe <logang@deltatee.com>

Thanks,

Logan

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

* Re: md device allocation cleanups
  2022-07-25 16:30 ` md device allocation cleanups Logan Gunthorpe
@ 2022-07-26  5:15   ` Song Liu
  0 siblings, 0 replies; 7+ messages in thread
From: Song Liu @ 2022-07-26  5:15 UTC (permalink / raw)
  To: Logan Gunthorpe; +Cc: Christoph Hellwig, linux-raid

On Mon, Jul 25, 2022 at 9:30 AM Logan Gunthorpe <logang@deltatee.com> wrote:
>
>
>
> On 2022-07-23 00:24, Christoph Hellwig wrote:
> > Hi all,
> >
> > this small series cleans up the mddev allocation a bit by returning
> > the structure to callers that want it instead of requiring another
> > lookup.

Applied to md-next. Thanks!

>
> I've reviewed and tested these two patches and they look good to me.
>
> Reviewed-by: Logan Gunthorpe <logang@deltatee.com>

I changed this to

Reviewed-and-tested-by: Logan Gunthorpe <logang@deltatee.com>

Please let me know if you think this is not appropriate.

Thanks,
Song

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

end of thread, other threads:[~2022-07-26  5:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-23  6:24 md device allocation cleanups Christoph Hellwig
2022-07-23  6:24 ` [PATCH 1/2] md: open code md_probe in autorun_devices Christoph Hellwig
2022-07-25  6:26   ` Hannes Reinecke
2022-07-23  6:24 ` [PATCH 2/2] md: return the allocated devices from md_alloc Christoph Hellwig
2022-07-25  6:27   ` Hannes Reinecke
2022-07-25 16:30 ` md device allocation cleanups Logan Gunthorpe
2022-07-26  5:15   ` 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.