973b69170a
OBS-URL: https://build.opensuse.org/request/show/669109 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/nvme-cli?expand=0&rev=29
94 lines
3.5 KiB
Diff
94 lines
3.5 KiB
Diff
From 6d827f7848212033ba2e560922a4b55bc323a1ef Mon Sep 17 00:00:00 2001
|
|
From: Hannes Reinecke <hare@suse.de>
|
|
Date: Mon, 14 Jan 2019 10:15:16 +0100
|
|
Subject: [PATCH] nvme_fc auto-connect scripts
|
|
|
|
References: bsc#1103354
|
|
|
|
Here's a set of script to enable FC-NVMe autoconnect, based on
|
|
the initial posting from James Smart.
|
|
FC-NVMe already generates an uevent whenever a new FC-NVMe remote
|
|
port is registered, so we can create an udev rule to parse this
|
|
event and start connecting to it.
|
|
|
|
The problem here is that the 'nvme connect' call might be taking
|
|
some time or might even stall altogether, so we cannot call it
|
|
directly from the udev rule. Rather, the udev rule starts a systemd
|
|
service, which then calls 'nvme connect' as a 'oneshot' program.
|
|
With this approach we are insulated from any stalls in udev rules.
|
|
Additionally we can implement a boot service to restart any missed
|
|
connections attempts.
|
|
|
|
Cc: James Smart <james.smart@broadcom.com>
|
|
Signed-off-by: Hannes Reinecke <hare@suse.com>
|
|
---
|
|
nvme-fc-autoconnect/70-nvmefc-autoconnect.conf | 1 +
|
|
nvme-fc-autoconnect/70-nvmefc-autoconnect.rules | 8 ++++++++
|
|
nvme-fc-autoconnect/nvmefc-boot-connections.service | 9 +++++++++
|
|
nvme-fc-autoconnect/nvmefc-connect@.service | 14 ++++++++++++++
|
|
4 files changed, 32 insertions(+)
|
|
create mode 100644 nvme-fc-autoconnect/70-nvmefc-autoconnect.conf
|
|
create mode 100644 nvme-fc-autoconnect/70-nvmefc-autoconnect.rules
|
|
create mode 100644 nvme-fc-autoconnect/nvmefc-boot-connections.service
|
|
create mode 100644 nvme-fc-autoconnect/nvmefc-connect@.service
|
|
|
|
diff --git a/nvme-fc-autoconnect/70-nvmefc-autoconnect.conf b/nvme-fc-autoconnect/70-nvmefc-autoconnect.conf
|
|
new file mode 100644
|
|
index 0000000..b92d94f
|
|
--- /dev/null
|
|
+++ b/nvme-fc-autoconnect/70-nvmefc-autoconnect.conf
|
|
@@ -0,0 +1 @@
|
|
+install_items+="/usr/lib/udev/rules.d/70-nvmefc-autoconnect.rules"
|
|
diff --git a/nvme-fc-autoconnect/70-nvmefc-autoconnect.rules b/nvme-fc-autoconnect/70-nvmefc-autoconnect.rules
|
|
new file mode 100644
|
|
index 0000000..aa4f9bf
|
|
--- /dev/null
|
|
+++ b/nvme-fc-autoconnect/70-nvmefc-autoconnect.rules
|
|
@@ -0,0 +1,8 @@
|
|
+#
|
|
+# nvme_fc: udev event to automatically scan (via discovery controller)
|
|
+# new FC nvme remote ports and auto-connect to the subsystems they report.
|
|
+#
|
|
+
|
|
+ACTION=="change", SUBSYSTEM=="fc", ENV{FC_EVENT}=="nvmediscovery", \
|
|
+ ENV{NVMEFC_HOST_TRADDR}=="*", ENV{NVMEFC_TRADDR}=="*", \
|
|
+ RUN+="/usr/bin/systemctl --no-block start nvmefc-connect@--host-traddr=$env{NVMEFC_HOST_TRADDR}\\x20--traddr=$env{NVMEFC_TRADDR}.service"
|
|
diff --git a/nvme-fc-autoconnect/nvmefc-boot-connections.service b/nvme-fc-autoconnect/nvmefc-boot-connections.service
|
|
new file mode 100644
|
|
index 0000000..aa35c15
|
|
--- /dev/null
|
|
+++ b/nvme-fc-autoconnect/nvmefc-boot-connections.service
|
|
@@ -0,0 +1,9 @@
|
|
+[Unit]
|
|
+Description=Auto-connect to subsystems on FC-NVME devices during boot
|
|
+
|
|
+[Service]
|
|
+Type=oneshot
|
|
+ExecStart=/bin/sh -c "echo add > /sys/class/fc/fc_udev_device/nvme_discovery"
|
|
+
|
|
+[Install]
|
|
+WantedBy=default.target
|
|
diff --git a/nvme-fc-autoconnect/nvmefc-connect@.service b/nvme-fc-autoconnect/nvmefc-connect@.service
|
|
new file mode 100644
|
|
index 0000000..c2370d6
|
|
--- /dev/null
|
|
+++ b/nvme-fc-autoconnect/nvmefc-connect@.service
|
|
@@ -0,0 +1,14 @@
|
|
+#
|
|
+# Unit file used by 70-nvmefc-autoconnect.rules.
|
|
+#
|
|
+
|
|
+[Unit]
|
|
+Description=Auto-connect to subsystems on FC-NVME devices
|
|
+After=syslog.target
|
|
+
|
|
+[Service]
|
|
+Type=oneshot
|
|
+ExecStart=/bin/sh -c "/usr/sbin/nvme connect-all --transport=fc `/usr/bin/echo -e '%i'`"
|
|
+
|
|
+[Install]
|
|
+WantedBy=default.target
|
|
--
|
|
2.13.7
|
|
|