[rdma: 7/9] Add NFSoRDMA configuration support to our init scripts
Doug Ledford
dledford at fedoraproject.org
Tue Aug 3 06:53:33 UTC 2010
commit 5632538a8731c95c152a45fd0dc7f067acecc65f
Author: Doug Ledford <dledford at redhat.com>
Date: Tue Aug 3 00:58:14 2010 -0400
Add NFSoRDMA configuration support to our init scripts
Signed-off-by: Doug Ledford <dledford at redhat.com>
rdma.conf | 4 +
rdma.init | 10 +++-
rdma.nfs-rdma.init | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++++
rdma.spec | 6 ++
4 files changed, 218 insertions(+), 1 deletions(-)
---
diff --git a/rdma.conf b/rdma.conf
index f3921e7..272e3a4 100644
--- a/rdma.conf
+++ b/rdma.conf
@@ -13,3 +13,7 @@ LOAD_RDS=yes
# Note: recent kernels should do this for us, but in case they don't, we'll
# leave this option
FIXUP_MTRR_REGS=no
+# Should we enable the NFSoRDMA service?
+NFSoRDMA_LOAD=yes
+NFSoRDMA_PORT=2050
+
diff --git a/rdma.init b/rdma.init
index 82831a8..6b11199 100644
--- a/rdma.init
+++ b/rdma.init
@@ -9,7 +9,7 @@
### BEGIN INIT INFO
# Provides: rdma
# Default-Stop: 0 1 2 3 4 5 6
-# Required-Stop: $network $srpd $opensm
+# Required-Stop: $network $srpd $opensm $nfs-rdma
# Short-Description: Loads and unloads the InfiniBand and iWARP kernel modules
# Description: Loads and unloads the InfiniBand and iWARP kernel modules
### END INIT INFO
@@ -284,6 +284,14 @@ stop()
fi
done
+ if is_module svcrdma; then
+ echo "NFSoRDMA support is still enabled."
+ echo "Please stop the nfs-rdma service before stopping the rdma service."
+ echo_failure
+ echo
+ return 1
+ fi
+
if ! is_module ib_core; then
# Nothing to do, make sure lock file is gone and return
rm -f /var/lock/subsys/rdma
diff --git a/rdma.nfs-rdma.init b/rdma.nfs-rdma.init
new file mode 100644
index 0000000..19977fc
--- /dev/null
+++ b/rdma.nfs-rdma.init
@@ -0,0 +1,199 @@
+#!/bin/bash
+#
+# Bring up/down NFSoRDMA support
+#
+# chkconfig: - 31 59
+# description: Enables/Disables NFS over RDMA interfaces
+# config: /etc/rdma/rdma.conf
+#
+### BEGIN INIT INFO
+# Provides: nfs-rdma
+# Default-Stop: 0 1 2 3 4 5 6
+# Required-Start: $network $rdma $nfs
+# Short-Description: Enables/Disables NFS over RDMA interfaces
+# Description: Enables/Disables NFS over RDMA interfaces
+### END INIT INFO
+
+CONFIG=/etc/rdma/rdma.conf
+
+. /etc/rc.d/init.d/functions
+
+LOAD_ULP_MODULES=""
+if [ -f $CONFIG ]; then
+ . $CONFIG
+
+ if [ "${NFSoRDMA_LOAD}" == "yes" ]; then
+ LOAD_ULP_MODULES="svcrdma xprtrdma"
+ fi
+ if [ -n "${NFSoRDMA_PORT}" ]; then
+ PORT=${NFSoRDMA_PORT}
+ else
+ PORT=2050
+ fi
+fi
+
+UNLOAD_ULP_MODULES="xprtrdma svcrdma"
+
+
+# If module $1 is loaded return - 0 else - 1
+is_module()
+{
+ /sbin/lsmod | grep -w "$1" > /dev/null 2>&1
+ return $?
+}
+
+load_modules()
+{
+ local RC=0
+
+ for module in $*; do
+ if ! is_module $module; then
+ /sbin/modprobe $module
+ res=$?
+ RC=$[ $RC + $res ]
+ if [ $res -ne 0 ]; then
+ echo
+ echo -n "Failed to load module $mod"
+ fi
+ fi
+ done
+ return $RC
+}
+
+unload_module()
+{
+ local mod=$1
+ # Unload module $1
+ if is_module $mod; then
+ /sbin/rmmod $mod > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ echo
+ echo "Failed to unload $mod"
+ return 1
+ fi
+ fi
+ return 0
+}
+
+start()
+{
+ local RC=0
+ local loaded=0
+
+ echo -n "Enabling NFSoRDMA support:"
+
+ load_modules $LOAD_ULP_MODULES
+ RC=$[ $RC + $? ]
+
+ if [ $RC -gt 0 ]; then
+ for mod in $UNLOAD_ULP_MODULES; do
+ unload_module $mod
+ done
+ echo_failure
+ echo
+ return $RC
+ fi
+
+ echo "rdma $PORT" > /proc/fs/nfsd/portlist
+ sleep 1
+ entry=$(grep rdma /proc/fs/nfsd/portlist)
+ if [ -z "$entry" ]; then
+ for mod in $UNLOAD_ULP_MODULES; do
+ unload_module $mod
+ done
+ echo_failure
+ echo
+ return 1
+ fi
+
+ touch /var/lock/subsys/nfs-rdma
+ echo_success
+ echo
+ return $RC
+}
+
+stop()
+{
+ echo -n "Disabling NFSoRDMA support:"
+
+ if ! is_module svcrdma; then
+ # Nothing to do, make sure lock file is gone and return
+ rm -f /var/lock/subsys/nfs-rdma
+ echo_success
+ echo
+ return 0
+ fi
+
+ # Tell the nfs server to quit listening on the rdma port
+ port=$(grep rdma /proc/fs/nfsd/portlist)
+ if [ -n "$port" ]; then
+ echo "-$port" > /proc/fs/nfsd/portlist
+ # Small sleep to let nfsd process our request
+ sleep 1
+ fi
+
+ # Unload NFSoRDMA modules
+ for mod in $UNLOAD_ULP_MODULES
+ do
+ unload_module $mod
+ RC=$[ $RC + $? ]
+ done
+
+ [ $RC -eq 0 ] && rm -f /var/lock/subsys/nfs-rdma
+ [ $RC -eq 0 ] && echo_success || echo_failure
+ echo
+ return $RC
+}
+
+status()
+{
+ entry=$(grep rdma /proc/fs/nfsd/portlist)
+
+ if [ -z "$entry" ]; then
+ if [ -f /var/lock/subsys/nfs-rdma ]; then
+ return 2
+ else
+ return 3
+ fi
+ else
+ return 0
+ fi
+}
+
+restart ()
+{
+ stop
+ start
+}
+
+condrestart ()
+{
+ [ -e /var/lock/subsys/nfs-rdma ] && restart || return 0
+}
+
+usage ()
+{
+ echo
+ echo "Usage: `basename $0` {start|stop|restart|condrestart|try-restart|force-reload|status}"
+ echo
+ return 2
+}
+
+case $1 in
+ start|stop|restart|condrestart|try-restart|force-reload)
+ [ `id -u` != "0" ] && exit 4 ;;
+esac
+
+case $1 in
+ start) start; RC=$? ;;
+ stop) stop; RC=$? ;;
+ restart) restart; RC=$? ;;
+ reload) RC=3 ;;
+ condrestart) condrestart; RC=$? ;;
+ try-restart) condrestart; RC=$? ;;
+ force-reload) condrestart; RC=$? ;;
+ status) status; RC=$? ;;
+ *) usage; RC=$? ;;
+esac
+
+exit $RC
diff --git a/rdma.spec b/rdma.spec
index cc33bb5..8d66a80 100644
--- a/rdma.spec
+++ b/rdma.spec
@@ -14,6 +14,7 @@ Source1: rdma.init
Source2: rdma.fixup-mtrr.awk
Source3: rdma.90-rdma.rules
Source4: rdma.ifup-ib
+Source5: rdma.nfs-rdma.init
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
Requires(post): chkconfig
@@ -38,6 +39,7 @@ install -m 0755 %{SOURCE1} ${RPM_BUILD_ROOT}%{_initrddir}/%{name}
install -m 0644 %{SOURCE2} ${RPM_BUILD_ROOT}%{_sysconfdir}/%{name}/fixup-mtrr.awk
install -m 0644 %{SOURCE3} ${RPM_BUILD_ROOT}%{_sysconfdir}/udev/rules.d/90-%{name}.rules
install -m 0755 %{SOURCE4} %{buildroot}%{_sysconfdir}/sysconfig/network-scripts/ifup-ib
+install -m 0755 %{SOURCE5} %{buildroot}%{_initrddir}/nfs-rdma
%clean
rm -rf ${RPM_BUILD_ROOT}
@@ -58,12 +60,16 @@ fi
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%{_sysconfdir}/%{name}/fixup-mtrr.awk
%{_initrddir}/%{name}
+%{_initrddir}/nfs-rdma
%{_sysconfdir}/udev/rules.d/90-%{name}.rules
%{_sysconfdir}/sysconfig/network-scripts/ifup-ib
%changelog
* Mon Aug 02 2010 Doug Ledford <dledford at redhat.com> - 1.0-8
- Update udev rules syntax to eliminate warnings emitted via syslog (bz603264)
+- Add new init script for starting/stopping nfs over rdma support
+- Require that the nfs-rdma service be down before stopping the rdma
+ service (bz613437)
* Thu Feb 25 2010 Doug Ledford <dledford at redhat.com> - 1.0-7
- Minor tweak to rdma.init to silence udev warnings (bz567981)
More information about the scm-commits
mailing list