On Mon, 2026-11-09 at 01:08 +0100, Xose Vazquez Perez wrote:
> 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 <[email protected]>
> Cc: Nilay Shroff <[email protected]>
> Cc: Guixin Liu <[email protected]>
> Cc: Wayne Berthiaume <[email protected]>
> Cc: Vasuki Manikarnike <[email protected]>
> Cc: Matthias Rudolph <[email protected]>
> Cc: Martin George <[email protected]>
> Cc: NetApp RDAC team <[email protected]>
> Cc: Zou Ming <[email protected]>
> Cc: Li Xiaokeng <[email protected]>
> Cc: Randy Jennings <[email protected]>
> Cc: Jyoti Rani <[email protected]>
> Cc: Brian Bunker <[email protected]>
> Cc: Uday Shankar <[email protected]>
> Cc: Chaitanya Kulkarni <[email protected]>
> Cc: Sagi Grimberg <[email protected]>
> Cc: Keith Busch <[email protected]>
> Cc: Christoph Hellwig <[email protected]>
> Cc: Marco Patalano <[email protected]>
> Cc: Ewan D. Milne <[email protected]>
> Cc: John Meneghini <[email protected]>
> Cc: Daniel Wagner <[email protected]>
> Cc: Daniel Wagner <[email protected]>
> Cc: Hannes Reinecke <[email protected]>
> Cc: Martin Wilck <[email protected]>
> Cc: Benjamin Marzinski <[email protected]>
> Cc: Christophe Varoqui <[email protected]>
> Cc: BLOCK-ML <[email protected]>
> Cc: NVME-ML <[email protected]>
> Cc: SCSI-ML <[email protected]>
> Cc: DM_DEVEL-ML <[email protected]>
> Signed-off-by: Xose Vazquez Perez <[email protected]>

Generally a good idea, but I think nvme-cli has a GitHub based
development workflow these days.

> ---
> BTW, there are two new I/O policies in development:
> https://lore.kernel.org/linux-nvme/[email protected]/
> https://lore.kernel.org/linux-nvme/[email protected]/
> ---
>  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
> -@UDEVRULESDIR@/71-nvmf-hpe.rules
> -@UDEVRULESDIR@/71-nvmf-netapp.rules
> -@UDEVRULESDIR@/71-nvmf-vastdata.rules
> +@UDEVRULESDIR@/80-nvmf-storage_arrays.rules
>  @DRACUTRULESDIR@/70-nvmf-autoconnect.conf
>  @SYSTEMDDIR@/[email protected]
>  @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"

I'm not a fan of repeated lengthy match expressions in udev rules.
Can we improve the readability by using GOTOs and LABELS?

SUBSYSTEM!="nvme*", GOTO="nvmf_end"

ATTR{model}=="HPE Alletra", GOTO="Alletra"
ATTR{model}=="NetApp ONTAP Controller", GOTO="Ontap"
...
GOTO="nvmf_end"

LABEL="Alletra"
ACTION=="add", SUBSYSTEM=="nvme-subsystem", ATTR{subsystype}=="nvm", \
    ATTR{iopolicy}="queue-depth"
ACTION!="remove", SUBSYSTEM=="nvme", KERNEL=="nvme*", \
    ATTR{transport}=="tcp", ATTR{ctrl_loss_tmo}="-1"
GOTO="nvmf_end"

LABEL="Ontap"
...
LABEL="nvmf_end"


-- 
Dr. Martin Wilck <[email protected]>
SUSE Software Solutions Germany GmbH, Frankenstr. 146, 90461 Nürnberg,
Germany
Geschäftsführer: Stefan Gaiser, Jochen Jaser, Abhinav Puri (HRB
36809,AG Nürnberg)

Reply via email to