[PATCH v3 0/5] nvme: make core.nvme_multipath configurable

From: John Meneghini
Date: Fri Mar 28 2025 - 15:38:53 EST


As agreed at LSF/MM here is a v3 patch set which includes the
new CONFIG_NVME_ENABLE_MULTIPATH_PARAM option.

NOTE: we agreed to call this CONFIG_NVME_DISBALE_MULTIPATH_PARAM.
However, during testing I realized that we needed to make the
logic positive or else many of the default make 'config' rules
would produce the wrong results.

For example:

make localmodconfig
make allmodconfig

would end up compiling out the core_nvme.multipath
parameter, and I don't think this is what we want.

To remove the core.nvme_multipath one needs to
explicity overide the default setting by saying
CONFIG_NVME_ENABLE_MULTIPATH_PARAM=n.

The current default setting for this option is

CONFIG_NVME_ENABLE_MULTIPATH_PARAM=y.

To remove the core_nvme.multipath one needs to
explicity overide the default setting by saying
CONFIG_NVME_ENABLE_MULTIPATH_PARAM=n.

Keith, I suggest that we add these to nvme-6.16 since there are a few
more changes than I had planned for. I'd like these patches to get some
soak time before they merge.

Closes: https://lore.kernel.org/linux-nvme/20241121220321.40616-1-bgurney@xxxxxxxxxx/
Closes: https://lore.kernel.org/linux-nvme/20250204211158.43126-1-bgurney@xxxxxxxxxx/
Closes: https://lore.kernel.org/linux-nvme/20250228032541.369804-1-jmeneghi@xxxxxxxxxx/

Signed-off-by: John Meneghini <jmeneghi@xxxxxxxxxx>

Changes Since v2

Changed the patch order and added:

nvme: add NVME_ENABLE_MULTIPATH_PARAM for loongarch
nvme: add NVME_ENABLE_MULTIPATH_PARAM for powerpc skiroot

I'm not 100% sure these two are needed but it would be
better to be safe than sorry.

nvme-multipath: add the NVME_ENABLE_MULTIPATH_PARAM config option

Changed the name of this config option from
NVME_MULTIPATH_PARAM to NVME_ENABLE_MULTIPATH_PARAM and
Fixed up the Kconfig description.

Tested the following make options:

make localmodconfig
make alldefconfig
make mod2noconfig
make allyesconfig
make allmodconfig
make olddefconfig
make oldconfig - accept all defaults

These all provide no change in current behavior.

Changes Since v1

Rebased patches to nvme-v6.15

nvme: add mulitipath warning to nvme_alloc_ns

Dropped this patch because the dmesg it produced was redundant and not
needed. Testing multiport devices with CONFIG_NVME_MULTIPATH disabled
show the following console message at boot.

[167523.157284] nvme nvme5: Found shared namespace 1, but multipathing not supported.
[167523.217083] nvme nvme6: Please enable CONFIG_NVME_MULTIPATH for full support of multi-port devices.

nvme-multipath: add the NVME_MULTIPATH_PARAM config option

Fixed up the Kconfig description for NVME_MULTIPATH_PARAM.
Add default y and tested the follow Kconfig options.

Tested the following:

make mod2noconfig
make allyesconfig
make allmodconfig
make olddefconfig
make oldconfig - accept all defaults

No change in current behavior.

nvme: update the multipath warning in nvme_init_ns_head

Tests ran with CONFIG_NVME_MULTIPATH=y and CONFIG_NVME_MULTIPATH_PARM=n

No change in current behavior except:

[root@rhel-storage-108 ~]# cat /sys/module/nvme_core/parameters/multipath
cat: /sys/module/nvme_core/parameters/multipath: No such file or directory

The following does nothing, just like it does when CONFIG_NVME_MULTIPATH=n

[root@rhel-storage-108 ~]# grubby --update-kernel=ALL --args="nvme_core.multipath=N"
[root@rhel-storage-108 ~]# reboot now
.
.
.
[root@rhel-storage-108 ~]# cat /proc/cmdline
BOOT_IMAGE=(hd1,gpt2)/vmlinuz-6.14.0-rc2_config_ana4a+ ... nvme_core.multipath=N
[root@rhel-storage-108 ~]# cat /sys/module/nvme_core/parameters/multipath
cat: /sys/module/nvme_core/parameters/multipath: No such file or directory

Tests ran with CONFIG_NVME_MULTIPATH=y and CONFIG_NVME_MULTIPATH_PARM=y

There is no change in current behavior:

Tests ran with CONFIG_NVME_MULTIPATH=y, CONFIG_NVME_MULTIPATH_PARM=y
and nvme_core.multipath=N

[ 372.040105] nvme nvme4: Found shared namespace 1, but multipathing not supported.
[ 372.047606] nvme nvme4: Shared namespace support requires core_nvme.multipath=Y.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
new message
[ 372.105469] nvme nvme5: creating 2 I/O queues.
[ 372.110383] nvme nvme5: mapped 2/0/0 default/read/poll queues.
[ 372.125480] nvme nvme5: new ctrl: NQN ....
[ 372.166081] nvme nvme5: Found shared namespace 1, but multipathing not supported.
[ 372.235964] nvme nvme6: creating 2 I/O queues.
[ 372.240926] nvme nvme6: mapped 2/0/0 default/read/poll queues.
[ 372.255964] nvme nvme6: new ctrl: NQN ....
[root@rhel-storage-108 ~]# cat /sys/module/nvme_core/parameters/multipath
N
[root@rhel-storage-108 ~]# grubby --remove-args="nvme_core.multipath=N" --update-kernel=ALL
[root@rhel-storage-108 ~]# grubby --info=ALL | grep nvme_core
[root@rhel-storage-108 ~]# reboot now
.
.
.
[root@rhel-storage-108 ~]# cat /sys/module/nvme_core/parameters/multipath
Y



John Meneghini (5):
nvme: update the multipath warning in nvme_init_ns_head
nvme: change the NVME_MULTIPATH config option description
nvme: add the NVME_ENABLE_MULTIPATH_PARAM config option
nvme: add NVME_ENABLE_MULTIPATH_PARAM for loongarch
nvme: add NVME_ENABLE_MULTIPATH_PARAM for powerpc skiroot

arch/loongarch/configs/loongson3_defconfig | 1 +
arch/powerpc/configs/skiroot_defconfig | 1 +
drivers/nvme/host/Kconfig | 24 ++++++++++++++++++----
drivers/nvme/host/core.c | 2 +-
drivers/nvme/host/multipath.c | 2 ++
5 files changed, 25 insertions(+), 5 deletions(-)

--
2.48.1