Subversion Repositories configs

Rev

Blame | Last modification | View Log | RSS feed

#!/bin/bash
#
# Bring up/down NFSoRDMA support
#
# chkconfig: - 31 61
# 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
# Required-Stop: $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