From 7723f827e8165652a4a18844114004d78ac411df Mon Sep 17 00:00:00 2001 From: Caleb Sander Date: Fri, 12 May 2023 13:41:06 -0600 Subject: [PATCH] nvmf-autoconnect: restart service to avoid dropping AEN Content-type: text/plain If another discovery log page change AEN is received while the autoconnect service is already running for a previous AEN, the autoconnect service is not being relaunched. For example, if some of the entries in the log page are not reachable, attempting to connect to them may take a long time before timing out, so AENs received while waiting for the connections have no effect. The AEN is effectively dropped: we ignore the new discovery log entries and worse, the controller won't send more AENs because it's waiting for the log page to be fetched in response to the previous AEN. Use systemctl restart instead of systemctl start to ensure nvme connect-all is run in response to each AEN. If a previous instance of the service is already running, it will be interrupted and the new log page will be fetched. Fixes: 391d3b12248a ("nvme-cli: nvmf auto-connect scripts") Signed-off-by: Caleb Sander --- nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules.in b/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules.in index e751ee09..3eca6dfe 100644 --- a/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules.in +++ b/nvmf-autoconnect/udev-rules/70-nvmf-autoconnect.rules.in @@ -15,18 +15,18 @@ ENV{NVME_HOST_IFACE}=="", ENV{NVME_HOST_IFACE}="none" ACTION=="change", SUBSYSTEM=="nvme", ENV{NVME_AEN}=="0x70f002",\ ENV{NVME_TRTYPE}=="*", ENV{NVME_TRADDR}=="*", \ ENV{NVME_TRSVCID}=="*", ENV{NVME_HOST_TRADDR}=="*", ENV{NVME_HOST_IFACE}=="*", \ - RUN+="@SYSTEMCTL@ --no-block start nvmf-connect@--device=$kernel\t--transport=$env{NVME_TRTYPE}\t--traddr=$env{NVME_TRADDR}\t--trsvcid=$env{NVME_TRSVCID}\t--host-traddr=$env{NVME_HOST_TRADDR}\t--host-iface=$env{NVME_HOST_IFACE}.service" + RUN+="@SYSTEMCTL@ --no-block restart nvmf-connect@--device=$kernel\t--transport=$env{NVME_TRTYPE}\t--traddr=$env{NVME_TRADDR}\t--trsvcid=$env{NVME_TRSVCID}\t--host-traddr=$env{NVME_HOST_TRADDR}\t--host-iface=$env{NVME_HOST_IFACE}.service" # nvme-fc transport generated events (old-style for compatibility) ACTION=="change", SUBSYSTEM=="fc", ENV{FC_EVENT}=="nvmediscovery", \ ENV{NVMEFC_HOST_TRADDR}=="*", ENV{NVMEFC_TRADDR}=="*", \ - RUN+="@SYSTEMCTL@ --no-block start nvmf-connect@--device=none\t--transport=fc\t--traddr=$env{NVMEFC_TRADDR}\t--trsvcid=none\t--host-traddr=$env{NVMEFC_HOST_TRADDR}.service" + RUN+="@SYSTEMCTL@ --no-block restart nvmf-connect@--device=none\t--transport=fc\t--traddr=$env{NVMEFC_TRADDR}\t--trsvcid=none\t--host-traddr=$env{NVMEFC_HOST_TRADDR}.service" # A discovery controller just (re)connected, re-read the discovery log change to # check if there were any changes since it was last connected. ACTION=="change", SUBSYSTEM=="nvme", ENV{NVME_EVENT}=="rediscover", ATTR{cntrltype}=="discovery", \ ENV{NVME_TRTYPE}=="*", ENV{NVME_TRADDR}=="*", \ ENV{NVME_TRSVCID}=="*", ENV{NVME_HOST_TRADDR}=="*", ENV{NVME_HOST_IFACE}=="*", \ - RUN+="@SYSTEMCTL@ --no-block start nvmf-connect@--device=$kernel\t--transport=$env{NVME_TRTYPE}\t--traddr=$env{NVME_TRADDR}\t--trsvcid=$env{NVME_TRSVCID}\t--host-traddr=$env{NVME_HOST_TRADDR}\t--host-iface=$env{NVME_HOST_IFACE}.service" + RUN+="@SYSTEMCTL@ --no-block restart nvmf-connect@--device=$kernel\t--transport=$env{NVME_TRTYPE}\t--traddr=$env{NVME_TRADDR}\t--trsvcid=$env{NVME_TRSVCID}\t--host-traddr=$env{NVME_HOST_TRADDR}\t--host-iface=$env{NVME_HOST_IFACE}.service" LABEL="autoconnect_end" -- 2.39.3