From: Laurence Oberman <loberman@redhat.com>
To: Martin George <martinus.gpy@gmail.com>, linux-nvme@lists.infradead.org
Cc: hch@lst.de, kbusch@kernel.org, sagi@grimberg.me,
Martin George <marting@netapp.com>
Subject: Re: [PATCH] nvme-multipath: report "none" iopolicy for discovery subsystems
Date: Wed, 30 Sep 2026 12:00:06 -0400 [thread overview]
Message-ID: <ada8481da01e3e4c7800fafdb75bf219fdc07672.camel@redhat.com> (raw)
In-Reply-To: <20260930153658.4002-1-marting@netapp.com>
On Wed, 2026-09-30 at 21:06 +0530, Martin George wrote:
> A discovery subsystem never exposes namespaces, so it has no
> multipath
> head and no I/O paths to select between. Nevertheless the per-
> subsystem
> iopolicy attribute is registered unconditionally and reads back the
> driver-wide default which is 'numa' for the discovery subsystems too.
> This can be misleading as it suggests a path selection policy is in
> effect when nothing is ever selected, and writing the attribute
> silently
> mutates state that can never be used.
>
> Report "none" instead for a discovery subsystem, and reject writes
> with -EOPNOTSUPP. Report "none" from iopolicies as well, so that the
> value read from iopolicy always remains a member of the set
> advertised
> by iopolicies; otherwise userspace validating the current policy
> against the available ones would reject its own subsystem.
>
> And while at it, document iopolicies too, which was not covered when
> it
> was added previously.
>
> Signed-off-by: Martin George <marting@netapp.com>
> ---
> Documentation/ABI/stable/sysfs-nvme | 15 +++++++++++++++
> drivers/nvme/host/multipath.c | 12 ++++++++++++
> 2 files changed, 27 insertions(+)
>
> diff --git a/Documentation/ABI/stable/sysfs-nvme
> b/Documentation/ABI/stable/sysfs-nvme
> index a0bb88ca1694..67795a2dd905 100644
> --- a/Documentation/ABI/stable/sysfs-nvme
> +++ b/Documentation/ABI/stable/sysfs-nvme
> @@ -465,6 +465,21 @@ Description:
> selections. Only available when
> CONFIG_NVME_MULTIPATH is
> enabled.
>
> + A discovery subsystem has no namespaces and hence no
> I/O
> + paths to select from: reading returns "none" and
> writing
> + fails with EOPNOTSUPP.
> +
> +What: /sys/class/nvme-subsystem/nvme-subsysX/iopolicies
> +Date: September 2026
> +KernelVersion: 7.4
> +Contact: Laurence Oberman <loberman@redhat.com>
> +Description:
> + Shows the I/O path selection policies that may be
> written
> + to the iopolicy attribute of this subsystem,
> separated by
> + spaces: "numa round-robin queue-depth". A discovery
> + subsystem accepts no policy at all and reports
> "none".
> + Only available when CONFIG_NVME_MULTIPATH is
> enabled.
> +
> What: /sys/class/nvme-subsystem/nvme-subsysX/subsystype
> Date: September 2021
> KernelVersion: 5.16
> diff --git a/drivers/nvme/host/multipath.c
> b/drivers/nvme/host/multipath.c
> index 11871f5f18c2..56ee25b448ad 100644
> --- a/drivers/nvme/host/multipath.c
> +++ b/drivers/nvme/host/multipath.c
> @@ -1054,6 +1054,10 @@ static ssize_t
> nvme_subsys_iopolicy_show(struct device *dev,
> struct nvme_subsystem *subsys =
> container_of(dev, struct nvme_subsystem, dev);
>
> + /* A discovery subsystem has no namespaces and hence no I/O
> paths */
> + if (subsys->subtype == NVME_NQN_DISC)
> + return sysfs_emit(buf, "none\n");
> +
> return sysfs_emit(buf, "%s\n",
> nvme_iopolicy_names[READ_ONCE(subsys-
> >iopolicy)]);
> }
> @@ -1088,6 +1092,9 @@ static ssize_t
> nvme_subsys_iopolicy_store(struct device *dev,
> container_of(dev, struct nvme_subsystem, dev);
> int policy;
>
> + if (subsys->subtype == NVME_NQN_DISC)
> + return -EOPNOTSUPP;
> +
> policy = nvme_iopolicy_parse(buf);
> if (policy < 0)
> return policy;
> @@ -1101,8 +1108,13 @@ SUBSYS_ATTR_RW(iopolicy, S_IRUGO | S_IWUSR,
> static ssize_t iopolicies_show(struct device *dev,
> struct device_attribute *attr, char
> *buf)
> {
> + struct nvme_subsystem *subsys =
> + container_of(dev, struct nvme_subsystem, dev);
> int i, len = 0;
>
> + if (subsys->subtype == NVME_NQN_DISC)
> + return sysfs_emit(buf, "none\n");
> +
> for (i = 0; i < ARRAY_SIZE(nvme_iopolicy_names); i++)
> len += sysfs_emit_at(buf, len, "%s%s", i ? " " : "",
> nvme_iopolicy_names[i]);
Hi Martin, thank you, yes, an oversight on my part not to update the
documentation.
Thanks for adding that patch.
In addition, your discovery patch change looks good to me.
Reviewed-by: Laurence Oberman <loberman@redhat.com>
prev parent reply other threads:[~2026-09-30 16:00 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-30 15:36 [PATCH] nvme-multipath: report "none" iopolicy for discovery subsystems Martin George
2026-09-30 16:00 ` Laurence Oberman [this message]
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=ada8481da01e3e4c7800fafdb75bf219fdc07672.camel@redhat.com \
--to=loberman@redhat.com \
--cc=hch@lst.de \
--cc=kbusch@kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=marting@netapp.com \
--cc=martinus.gpy@gmail.com \
--cc=sagi@grimberg.me \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox