From: Benjamin Marzinski <bmarzins@redhat.com>
To: John Garry <john.g.garry@oracle.com>
Cc: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me, axboe@fb.com,
martin.petersen@oracle.com,
james.bottomley@hansenpartnership.com, hare@suse.com,
jmeneghi@redhat.com, linux-nvme@lists.infradead.org,
linux-scsi@vger.kernel.org, michael.christie@oracle.com,
snitzer@kernel.org, dm-devel@lists.linux.dev,
linux-block@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 04/24] scsi-multipath: introduce scsi_mpath_device_class
Date: Sun, 1 Mar 2026 21:54:25 -0500 [thread overview]
Message-ID: <aaT74XadDrQb22Cf@redhat.com> (raw)
In-Reply-To: <20260225153627.1032500-5-john.g.garry@oracle.com>
On Wed, Feb 25, 2026 at 03:36:07PM +0000, John Garry wrote:
> Introduce a new class for multipathed devices, scsi_mpath_device_class.
>
> The purpose of this class is for managing the scsi_mpath_head.dev member.
>
> The naming for the scsi_device structure is in form H:C:I:L,
> where H is host, C is channel, I is ID, and L is lun.
>
> However, for a multipathed scsi_device, all the naming members may be
> different between member scsi_device's. As such, just use a simple
> single-number naming index for each scsi_mpath_head.
>
> The sysfs device folder will have links to the scsi_device's so, it will
> be possible to lookup the member scsi_device's.
>
> An example sysfs entry is as follows:
> # ls -l /sys/class/scsi_mpath_device/0/
> total 0
> drwxr-xr-x 2 root root 0 Feb 24 11:56 power
> lrwxrwxrwx 1 root root 0 Feb 24 11:56 subsystem -> ../../../../class/scsi_mpath_device
> -rw-r--r-- 1 root root 4096 Feb 24 11:55 uevent
> -r--r--r-- 1 root root 4096 Feb 24 11:56 wwid
> # cat /sys/class/scsi_mpath_device/0/wwid
> naa.600140505200a986f0043c9afa1fd077
>
> Signed-off-by: John Garry <john.g.garry@oracle.com>
> ---
> drivers/scsi/scsi_multipath.c | 67 ++++++++++++++++++++++++++++++++++-
> 1 file changed, 66 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/scsi_multipath.c b/drivers/scsi/scsi_multipath.c
> index 49316269fad8e..05af178921cb4 100644
> --- a/drivers/scsi/scsi_multipath.c
> +++ b/drivers/scsi/scsi_multipath.c
> @@ -85,6 +85,69 @@ static int scsi_mpath_unique_lun_id(struct scsi_device *sdev)
> return 0;
> }
>
> +static void scsi_mpath_delete_head(struct scsi_mpath_head *scsi_mpath_head)
> +{
> + mutex_lock(&scsi_mpath_heads_lock);
> + list_del_init(&scsi_mpath_head->entry);
> + mutex_unlock(&scsi_mpath_heads_lock);
> +}
> +
> +static void scsi_mpath_head_release(struct device *dev)
> +{
> + struct scsi_mpath_head *scsi_mpath_head =
> + container_of(dev, struct scsi_mpath_head, dev);
> + struct mpath_head *mpath_head = scsi_mpath_head->mpath_head;
> +
> + scsi_mpath_delete_head(scsi_mpath_head);
> + ida_free(&scsi_multipath_dev_ida, scsi_mpath_head->index);
> + mpath_put_head(mpath_head);
> + kfree(scsi_mpath_head);
> +}
> +
> +static ssize_t scsi_mpath_device_wwid_show(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + struct scsi_mpath_head *scsi_mpath_head =
> + container_of(dev, struct scsi_mpath_head, dev);
> +
> + return sysfs_emit(buf, "%s\n", scsi_mpath_head->wwid);
> +}
> +
> +static DEVICE_ATTR(wwid, S_IRUGO, scsi_mpath_device_wwid_show, NULL);
> +
> +static struct attribute *scsi_mpath_device_attrs[] = {
> + &dev_attr_wwid.attr,
> + NULL
> +};
> +
> +static const struct attribute_group scsi_mpath_device_attrs_group = {
> + .attrs = scsi_mpath_device_attrs,
> +};
> +
> +static bool scsi_multipath_sysfs_group_visible(struct kobject *kobj)
> +{
> + return true;
> +}
> +
> +static bool scsi_multipath_sysfs_attr_visible(struct kobject *kobj,
> + struct attribute *attr, int n)
The return for this is actually a umode_t.
> +{
> + return false;
> +}
> +DEFINE_SYSFS_GROUP_VISIBLE(scsi_multipath_sysfs)
Nitpick again: This could just use DEFINE_SIMPLE_SYSFS_GROUP_VISIBLE()
Also, this code would make more sense in the next patch.
-Ben
> +
> +const struct attribute_group *scsi_mpath_device_groups[] = {
> + &scsi_mpath_device_attrs_group,
> + NULL
> +};
> +
> +static const struct class scsi_mpath_device_class = {
> + .name = "scsi_mpath_device",
> + .dev_groups = scsi_mpath_device_groups,
> + .dev_release = scsi_mpath_head_release,
> +};
> +
> static int scsi_multipath_sdev_init(struct scsi_device *sdev)
> {
> struct Scsi_Host *shost = sdev->host;
> @@ -129,6 +192,7 @@ static struct scsi_mpath_head *scsi_mpath_alloc_head(void)
> goto out_put_head;
>
> device_initialize(&scsi_mpath_head->dev);
> + scsi_mpath_head->dev.class = &scsi_mpath_device_class;
> ret = dev_set_name(&scsi_mpath_head->dev, "%d", scsi_mpath_head->index);
> if (ret) {
> put_device(&scsi_mpath_head->dev);
> @@ -294,11 +358,12 @@ EXPORT_SYMBOL_GPL(scsi_mpath_put_head);
>
> int __init scsi_multipath_init(void)
> {
> - return 0;
> + return class_register(&scsi_mpath_device_class);
> }
>
> void __exit scsi_multipath_exit(void)
> {
> + class_unregister(&scsi_mpath_device_class);
> }
>
> MODULE_LICENSE("GPL");
> --
> 2.43.5
next prev parent reply other threads:[~2026-03-02 2:54 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-25 15:36 [PATCH 00/24] Native SCSI multipath support John Garry
2026-02-25 15:36 ` [PATCH 01/24] scsi: core: add SCSI_MAX_QUEUE_DEPTH John Garry
2026-03-03 6:52 ` Hannes Reinecke
2026-03-03 7:45 ` John Garry
2026-02-25 15:36 ` [PATCH 02/24] scsi-multipath: introduce basic SCSI device support John Garry
2026-03-02 2:16 ` Benjamin Marzinski
2026-03-02 11:33 ` John Garry
2026-03-02 2:22 ` Benjamin Marzinski
2026-03-02 11:39 ` John Garry
2026-03-03 5:39 ` Benjamin Marzinski
2026-03-03 8:01 ` Hannes Reinecke
2026-03-03 14:20 ` Benjamin Marzinski
2026-03-05 15:59 ` John Garry
2026-03-03 6:57 ` Hannes Reinecke
2026-03-03 7:45 ` John Garry
2026-02-25 15:36 ` [PATCH 03/24] scsi-multipath: introduce scsi_device head structure John Garry
2026-03-02 2:50 ` Benjamin Marzinski
2026-03-02 12:00 ` John Garry
2026-03-03 7:13 ` Hannes Reinecke
2026-03-03 7:50 ` John Garry
2026-02-25 15:36 ` [PATCH 04/24] scsi-multipath: introduce scsi_mpath_device_class John Garry
2026-03-02 2:54 ` Benjamin Marzinski [this message]
2026-03-02 12:01 ` John Garry
2026-03-03 7:16 ` Hannes Reinecke
2026-03-03 10:53 ` John Garry
2026-02-25 15:36 ` [PATCH 05/24] scsi-multipath: provide sysfs link from to scsi_device John Garry
2026-03-03 7:19 ` Hannes Reinecke
2026-03-03 10:49 ` John Garry
2026-02-25 15:36 ` [PATCH 06/24] scsi-multipath: support iopolicy John Garry
2026-02-25 15:36 ` [PATCH 07/24] scsi-multipath: clone each bio John Garry
2026-03-02 3:21 ` Benjamin Marzinski
2026-03-02 12:12 ` John Garry
2026-03-02 16:27 ` Benjamin Marzinski
2026-03-02 17:16 ` John Garry
2026-02-25 15:36 ` [PATCH 08/24] scsi-multipath: clear path when decide is blocked John Garry
2026-02-25 15:36 ` [PATCH 09/24] scsi-multipath: failover handling John Garry
2026-03-02 3:57 ` Benjamin Marzinski
2026-03-02 12:20 ` John Garry
2026-03-04 5:46 ` Benjamin Marzinski
2026-03-04 11:11 ` John Garry
2026-02-25 15:36 ` [PATCH 10/24] scsi-multipath: add scsi_mpath_{start,end}_request() John Garry
2026-03-02 4:08 ` Benjamin Marzinski
2026-03-02 12:20 ` John Garry
2026-03-04 6:13 ` Benjamin Marzinski
2026-03-04 11:11 ` John Garry
2026-03-05 2:37 ` Benjamin Marzinski
2026-02-25 15:36 ` [PATCH 11/24] scsi-multipath: add scsi_mpath_ioctl() John Garry
2026-02-25 15:36 ` [PATCH 12/24] scsi-multipath: provide callbacks for path state John Garry
2026-03-03 5:31 ` Benjamin Marzinski
2026-02-25 15:36 ` [PATCH 13/24] scsi-multipath: set disk device_groups John Garry
2026-02-25 15:36 ` [PATCH 14/24] scsi-multipath: add PR support John Garry
2026-02-25 15:36 ` [PATCH 15/24] scsi: sd: refactor PR ops John Garry
2026-02-25 15:36 ` [PATCH 16/24] scsi: sd: add multipath disk class John Garry
2026-02-25 15:36 ` [PATCH 17/24] scsi: sd: add sd_mpath_{start,end}_command() John Garry
2026-02-25 15:36 ` [PATCH 18/24] scsi: sd: add sd_mpath_ioctl() John Garry
2026-02-25 15:36 ` [PATCH 19/24] scsi: sd: add multipath PR support John Garry
2026-02-25 15:36 ` [PATCH 20/24] scsi: sd: add sd_mpath_to_disk() John Garry
2026-02-25 15:36 ` [PATCH 21/24] scsi: sd: support multipath disk John Garry
2026-03-10 2:40 ` Benjamin Marzinski
2026-03-10 10:12 ` John Garry
2026-03-10 15:19 ` Benjamin Marzinski
2026-02-25 15:36 ` [PATCH 22/24] scsi: sd: add mpath_dev file John Garry
2026-02-25 15:36 ` [PATCH 23/24] scsi: sd: add mpath_numa_nodes dev attribute John Garry
2026-02-25 15:36 ` [PATCH 24/24] scsi: sd: add mpath_queue_depth " John Garry
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aaT74XadDrQb22Cf@redhat.com \
--to=bmarzins@redhat.com \
--cc=axboe@fb.com \
--cc=dm-devel@lists.linux.dev \
--cc=hare@suse.com \
--cc=hch@lst.de \
--cc=james.bottomley@hansenpartnership.com \
--cc=jmeneghi@redhat.com \
--cc=john.g.garry@oracle.com \
--cc=kbusch@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=michael.christie@oracle.com \
--cc=sagi@grimberg.me \
--cc=snitzer@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.