[PATCH] nvme-cli: nvmf-autoconnect: Consolidate vendor-specific NVMe-oF udev rules into a single file
Xose Vazquez Perez
xose.vazquez at gmail.com
Sun Nov 8 16:08:33 PST 2026
Replace individual vendor udev rules (HPE, NetApp, and VAST Data) with
a unified 80-nvmf-storage_arrays.rules file, leaving the rules untouched.
This shifts execution to the 80 range for a logical sequence after base
discovery and autoconnect, while simplifying maintenance and packaging.
Cc: John Garry <john.garry at linux.dev>
Cc: Nilay Shroff <nilay at linux.ibm.com>
Cc: Guixin Liu <kanie at linux.alibaba.com>
Cc: Wayne Berthiaume <Wayne.Berthiaume at dell.com>
Cc: Vasuki Manikarnike <vasuki.manikarnike at hpe.com>
Cc: Matthias Rudolph <Matthias.Rudolph at hitachivantara.com>
Cc: Martin George <marting at netapp.com>
Cc: NetApp RDAC team <ng-eseries-upstream-maintainers at netapp.com>
Cc: Zou Ming <zouming.zouming at huawei.com>
Cc: Li Xiaokeng <lixiaokeng at huawei.com>
Cc: Randy Jennings <randyj at purestorage.com>
Cc: Jyoti Rani <jrani at purestorage.com>
Cc: Brian Bunker <brian at purestorage.com>
Cc: Uday Shankar <ushankar at purestorage.com>
Cc: Chaitanya Kulkarni <kch at nvidia.com>
Cc: Sagi Grimberg <sagi at grimberg.me>
Cc: Keith Busch <kbusch at kernel.org>
Cc: Christoph Hellwig <hch at lst.de>
Cc: Marco Patalano <mpatalan at redhat.com>
Cc: Ewan D. Milne <emilne at redhat.com>
Cc: John Meneghini <jmeneghi at redhat.com>
Cc: Daniel Wagner <dwagner at suse.de>
Cc: Daniel Wagner <wagi at monom.org>
Cc: Hannes Reinecke <hare at suse.de>
Cc: Martin Wilck <mwilck at suse.com>
Cc: Benjamin Marzinski <bmarzins at redhat.com>
Cc: Christophe Varoqui <christophe.varoqui at opensvc.com>
Cc: BLOCK-ML <linux-block at vger.kernel.org>
Cc: NVME-ML <linux-nvme at lists.infradead.org>
Cc: SCSI-ML <linux-scsi at vger.kernel.org>
Cc: DM_DEVEL-ML <dm-devel at lists.linux.dev>
Signed-off-by: Xose Vazquez Perez <xose.vazquez at gmail.com>
---
BTW, there are two new I/O policies in development:
https://lore.kernel.org/linux-nvme/20260815173502.1185929-1-nilay@linux.ibm.com/
https://lore.kernel.org/linux-nvme/20261026111019.3724465-1-kanie@linux.alibaba.com/
---
meson.build | 4 +---
nvme.spec.in | 4 +---
.../udev-rules/71-nvmf-hpe.rules.in | 5 ----
.../udev-rules/71-nvmf-netapp.rules.in | 6 -----
.../udev-rules/71-nvmf-vastdata.rules.in | 5 ----
.../80-nvmf-storage_arrays.rules.in | 23 +++++++++++++++++++
6 files changed, 25 insertions(+), 22 deletions(-)
delete mode 100644 nvmf-autoconnect/udev-rules/71-nvmf-hpe.rules.in
delete mode 100644 nvmf-autoconnect/udev-rules/71-nvmf-netapp.rules.in
delete mode 100644 nvmf-autoconnect/udev-rules/71-nvmf-vastdata.rules.in
create mode 100644 nvmf-autoconnect/udev-rules/80-nvmf-storage_arrays.rules.in
diff --git a/meson.build b/meson.build
index 90356ad94..00e9ad1be 100644
--- a/meson.build
+++ b/meson.build
@@ -894,9 +894,7 @@ if want_nvme
udev_files = {
'65-persistent-net-nbft.rules': 'nvmf',
'70-nvmf-keys.rules': 'nvmf-autoconnect',
- '71-nvmf-hpe.rules': 'nvmf',
- '71-nvmf-netapp.rules': 'nvmf',
- '71-nvmf-vastdata.rules': 'nvmf',
+ '80-nvmf-storage_arrays.rules': 'nvmf',
}
if want_nvmf_autoconnect
udev_files += {'70-nvmf-autoconnect.rules': 'nvmf-autoconnect'}
diff --git a/nvme.spec.in b/nvme.spec.in
index 23d3d3268..a37c1a08d 100644
--- a/nvme.spec.in
+++ b/nvme.spec.in
@@ -36,9 +36,7 @@ touch %{buildroot}@SYSCONFDIR@/nvme/hostid
@UDEVRULESDIR@/65-persistent-net-nbft.rules
@UDEVRULESDIR@/70-nvmf-autoconnect.rules
@UDEVRULESDIR@/70-nvmf-keys.rules
- at UDEVRULESDIR@/71-nvmf-hpe.rules
- at UDEVRULESDIR@/71-nvmf-netapp.rules
- at UDEVRULESDIR@/71-nvmf-vastdata.rules
+ at UDEVRULESDIR@/80-nvmf-storage_arrays.rules
@DRACUTRULESDIR@/70-nvmf-autoconnect.conf
@SYSTEMDDIR@/nvmf-connect at .service
@SYSTEMDDIR@/nvmefc-boot-connections.service
diff --git a/nvmf-autoconnect/udev-rules/71-nvmf-hpe.rules.in b/nvmf-autoconnect/udev-rules/71-nvmf-hpe.rules.in
deleted file mode 100644
index b050dd502..000000000
--- a/nvmf-autoconnect/udev-rules/71-nvmf-hpe.rules.in
+++ /dev/null
@@ -1,5 +0,0 @@
-# Set appropriate iopolicy for HPE Alletra Storage MP
-ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="HPE Alletra", ATTR{iopolicy}="round-robin"
-
-# Set ctrl_loss_tmo to -1 for HPE Alletra Storage MP NVMe/TCP
-ACTION!="remove", SUBSYSTEM=="nvme", KERNEL=="nvme*", ATTR{transport}=="tcp", ATTR{model}=="HPE Alletra", ATTR{ctrl_loss_tmo}="-1"
diff --git a/nvmf-autoconnect/udev-rules/71-nvmf-netapp.rules.in b/nvmf-autoconnect/udev-rules/71-nvmf-netapp.rules.in
deleted file mode 100644
index c76a3c434..000000000
--- a/nvmf-autoconnect/udev-rules/71-nvmf-netapp.rules.in
+++ /dev/null
@@ -1,6 +0,0 @@
-# Set appropriate iopolicy for NetApp ONTAP and NetApp E-Series
-ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="queue-depth"
-ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp E-Series", ATTR{iopolicy}="round-robin"
-
-# Set ctrl_loss_tmo to -1 for NetApp ONTAP NVMe/TCP
-ACTION!="remove", SUBSYSTEM=="nvme", KERNEL=="nvme*", ATTR{transport}=="tcp", ATTR{model}=="NetApp ONTAP Controller", ATTR{ctrl_loss_tmo}="-1"
diff --git a/nvmf-autoconnect/udev-rules/71-nvmf-vastdata.rules.in b/nvmf-autoconnect/udev-rules/71-nvmf-vastdata.rules.in
deleted file mode 100644
index dcd6146d8..000000000
--- a/nvmf-autoconnect/udev-rules/71-nvmf-vastdata.rules.in
+++ /dev/null
@@ -1,5 +0,0 @@
-# Enable round-robin for Vast Data Block Subsystem
-ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="VASTData", ATTR{iopolicy}="round-robin"
-
-# Set ctrl_loss_tmo to -1 for Vast Data Block Controller
-ACTION!="remove", SUBSYSTEM=="nvme", KERNEL=="nvme*", ATTR{model}=="VASTData", ATTR{ctrl_loss_tmo}="-1"
diff --git a/nvmf-autoconnect/udev-rules/80-nvmf-storage_arrays.rules.in b/nvmf-autoconnect/udev-rules/80-nvmf-storage_arrays.rules.in
new file mode 100644
index 000000000..1cd6c0c0b
--- /dev/null
+++ b/nvmf-autoconnect/udev-rules/80-nvmf-storage_arrays.rules.in
@@ -0,0 +1,23 @@
+##### Storage arrays
+
+#### Set iopolicy for NVMe-oF
+### iopolicy: numa (default), round-robin (>=5.1), or queue-depth (>=6.11)
+
+## HPE
+# Alletra 9000 / Alletra Storage MP / GreenLake Block Storage MP
+ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="HPE Alletra", ATTR{iopolicy}="round-robin"
+ACTION!="remove", SUBSYSTEM=="nvme", KERNEL=="nvme*", ATTR{transport}=="tcp", ATTR{model}=="HPE Alletra", ATTR{ctrl_loss_tmo}="-1"
+
+## NetApp
+# ONTAP AFF/ASA Series
+ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp ONTAP Controller", ATTR{iopolicy}="queue-depth"
+ACTION!="remove", SUBSYSTEM=="nvme", KERNEL=="nvme*", ATTR{transport}=="tcp", ATTR{model}=="NetApp ONTAP Controller", ATTR{ctrl_loss_tmo}="-1"
+# E/EF-Series
+ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="NetApp E-Series", ATTR{iopolicy}="round-robin"
+
+## VAST Data
+# Block Subsystem
+ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", ATTR{model}=="VASTData", ATTR{iopolicy}="round-robin"
+ACTION!="remove", SUBSYSTEM=="nvme", KERNEL=="nvme*", ATTR{model}=="VASTData", ATTR{ctrl_loss_tmo}="-1"
+
+##### EOF
--
2.56.0
More information about the Linux-nvme
mailing list