From cb9cf2ea0a2e30f27f8ce5a1d5a6a855a8b91438 Mon Sep 17 00:00:00 2001 From: Ameer Hamza Date: Tue, 14 May 2024 19:40:30 +0500 Subject: [PATCH] nvme-of: Remove/Add disk on discovery change event --- .../nvmf-connect@.service.d/override.conf | 3 ++ src/freenas/usr/local/bin/nvmf-connect.sh | 50 +++++++++++++++++++ src/freenas/usr/local/bin/nvmf-wrapper.sh | 29 +++++++++++ 3 files changed, 82 insertions(+) create mode 100644 src/freenas/etc/systemd/system/nvmf-connect@.service.d/override.conf create mode 100755 src/freenas/usr/local/bin/nvmf-connect.sh create mode 100755 src/freenas/usr/local/bin/nvmf-wrapper.sh diff --git a/src/freenas/etc/systemd/system/nvmf-connect@.service.d/override.conf b/src/freenas/etc/systemd/system/nvmf-connect@.service.d/override.conf new file mode 100644 index 000000000000..e216fa3ee6e3 --- /dev/null +++ b/src/freenas/etc/systemd/system/nvmf-connect@.service.d/override.conf @@ -0,0 +1,3 @@ +[Service] +ExecStart= +ExecStart=/bin/sh -c "/usr/local/bin/nvmf-wrapper.sh `/bin/echo -e '${CONNECT_ARGS}'`" diff --git a/src/freenas/usr/local/bin/nvmf-connect.sh b/src/freenas/usr/local/bin/nvmf-connect.sh new file mode 100755 index 000000000000..ff91555ae62f --- /dev/null +++ b/src/freenas/usr/local/bin/nvmf-connect.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +RECONNECT_TIMEOUT_SEC=5 +discovery_dev=$(echo "$@" | grep -oP '(?<=--device=)\w+') +discovery_addr=$( $queue diff --git a/src/freenas/usr/local/bin/nvmf-wrapper.sh b/src/freenas/usr/local/bin/nvmf-wrapper.sh new file mode 100755 index 000000000000..4b4ae990576f --- /dev/null +++ b/src/freenas/usr/local/bin/nvmf-wrapper.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +if [ "$#" -eq 0 ]; then + echo "Error: No arguments provided." + exit 1 +fi + +discovery_nqn="nqn.2014-08.org.nvmexpress.discovery" +discovery_dev=$(echo "$@" | grep -oP '(?<=--device=)\w+') + +if [[ $( $queue +systemd-run --unit=${discovery_dev}-of.service /bin/bash -c "/usr/local/bin/nvmf-connect.sh $*" + +# If service is still active and queue reads EXIT, we have a race. Wait for small interval since +# we already know that nvmf-connect.sh is about to exit. +if [ $? != 0 ] && [ "EXIT" = $(<$queue) ]; then + sleep 0.1 + systemd-run --unit=${discovery_dev}-of.service /bin/bash -c "/usr/local/bin/nvmf-connect.sh $*" + + if [ $? != 0 ]; then + echo "Error: ${discovery_dev}-of.service failed to start after waiting for 100 milliseconds" + fi +fi