# chkconfig: - 59 76
# description: Part of the lustre file system.
# probe: true
-# config: /etc/sysconfig/lustre
+# config: /etc/sysconfig/lnet
# Source function library.
[ -f /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions
# Check for and source configuration file otherwise set defaults
[ -f /etc/sysconfig/lnet ] && . /etc/sysconfig/lnet
-declare -r TOP_MODULES=( \
- obdecho \
- llite \
- lustre \
- osc \
- lov \
- mds \
- mdc \
- mgs \
- mgc \
- ost \
- obdfilter \
- lquota \
- ptlrpc \
-)
-declare -r BOTTOM_MODULES=( \
- ksocklnd \
- kqswlnd \
- ko2iblnd \
- fsfilt_ldiskfs \
- obdclass \
- lnet \
- lvfs \
- libcfs \
- ldiskfs \
-)
-
declare -r awkprog='BEGIN { rc = -1 }
{ if ( $1 == module_name ) { rc = $3; exit; } }
END { print rc }'
fi
}
-remove_modules ()
-{
- local modules="${@}"
- local ref_cnt
-
- for mod in $modules; do
- ref_cnt=`/sbin/lsmod | awk "$awkprog" "module_name=$mod"`
- if [ $ref_cnt -lt 0 ]; then
- # module not loaded, skip it
- continue
- fi
- if [ $ref_cnt -gt 0 ]; then
- # module in use. maybe it just needs a few seconds
- # after removal of previous modules.
- sleep 5
- ref_cnt=`/sbin/lsmod | awk "$awkprog" module_name=$mod`
- fi
- if [ $ref_cnt -eq 0 ]; then
- # unload the module
- echo "Removing module $mod"
- /sbin/rmmod $mod
- if [ $? -ne 0 ]; then
- echo "ERROR: Failed to remove module $mod."
- return 1
- fi
- else
- # boo! module still in use.
- echo "ERROR: Module $mod has non-zero reference count."
- return 1
- fi
- done
-
- return 0
-}
-
stop_lnet ()
{
- local errmsg=`/usr/sbin/lctl network unconfigure 2>&1`
+ local errmsg=$(/usr/sbin/lctl network down 2>&1)
if [ $? -gt 0 ]; then
# The following error message means that lnet is already
# unconfigured, and the modules are not loaded.
egrep -q "lnet" /proc/modules && STATE="loaded"
# check for any routes - on a portals router this is the only thing
- [ "`cat /proc/sys/lnet/routes 2> /dev/null`" ] && STATE="running" && RETVAL=0
+ VAR=$(lctl get_param -n routes 2>&1)
+ if [ $? = 0 ] ; then
+ STATE="running"
+ RETVAL=0
+ fi
# check if this is a router
- if [ -d /proc/sys/lnet ]; then
- ROUTER="`cat /proc/sys/lnet/routes | head -1 | grep -i -c \"Routing enabled\"`"
- if [[ ! -z ${ROUTER} && ${ROUTER} -ge 1 ]]; then
- STATE="running"
- RETVAL=0
- fi
+ if [[ "$(lctl get_param -n routes)" =~ "Routing enabled" ]]; then
+ STATE="running"
+ RETVAL=0
fi
# check for error in health_check
- HEALTH="/proc/fs/lustre/health_check"
- [ -f "$HEALTH" ] && grep -q "NOT HEALTHY" $HEALTH && STATE="unhealthy" && RETVAL=1
+ local health_check=$(lctl get_param -n health_check)
+ if [[ "$health_check" =~ "NOT HEALTHY" ]]; then
+ STATE="unhealthy"
+ RETVAL=1
+ fi
- # check for LBUG
- [ -f "$HEALTH" ] && grep -q "LBUG" $HEALTH && STATE="LBUG" && RETVAL=152
+ if [[ "$health_check" =~ "LBUG" ]]; then
+ STATE="LBUG"
+ RETVAL=152
+ fi
echo $STATE
eval $old_nullglob
}
LUSTRE_ROUTES_CONFIG_FILE="/etc/sysconfig/lnet_routes.conf"
+LUSTRE_LNET_CONFIG_FILE="/etc/sysconfig/lnet.conf"
+LUSTRE_LNET_CONFIG_UTILITY="/usr/sbin/lnetctl"
# See how we were called.
case "$1" in
run_preexec_check "start"
touch /var/lock/subsys/lnet
modprobe lnet || exit 1
- lctl network up || exit 1
+ # if lnet.conf file exists then use lnetctl lnet configure, since
+ # that doesn't load the networks and routes defined in the mod
+ # params. The appropriate configuration will be picked up from
+ # the lnet.conf YAML file.
+ if [ -x $LUSTRE_LNET_CONFIG_UTILITY -a -f "$LUSTRE_LNET_CONFIG_FILE" ]; then
+ $LUSTRE_LNET_CONFIG_UTILITY lnet configure || exit 1
+ else
+ lctl network up || exit 1
+ fi
+ # if an lnet.conf file exists then pass that to the lnetctl
+ # utility for parsing. This will configure the items defined
+ # in YAML format in the config file.
+ if [ -x $LUSTRE_LNET_CONFIG_UTILITY -a -f "$LUSTRE_LNET_CONFIG_FILE" ]; then
+ $LUSTRE_LNET_CONFIG_UTILITY import < $LUSTRE_LNET_CONFIG_FILE
+ fi
# if a routes config file is given then use it to configure the
# routes if not then default to LUSTRE_ROUTES_CONFIG_FILE
if [ -f "$2" ]; then
;;
stop)
run_preexec_check "stop"
- remove_modules ${TOP_MODULES[*]} || exit 1
stop_lnet || exit 1
- remove_modules ${BOTTOM_MODULES[*]} || exit 1
+ lustre_rmmod || exit 1
rm -f /var/lock/subsys/lnet
run_postexec_check "stop"
;;
}
;;
*)
- echo $"Usage: lustre {start|stop|status|restart|reload|condrestart}"
+ echo $"Usage: lnet {start|stop|status|restart|reload|condrestart}"
exit 1
esac