Whamcloud - gitweb
Revert "LU-9439 scripts: Change behavior of lustre_rmmod"
[fs/lustre-release.git] / lustre / scripts / lustre_rmmod
index 792f193..76a9d11 100755 (executable)
@@ -1,44 +1,38 @@
-#!/bin/bash
+#!/bin/sh
 #
-# Takes a list of modules and unloads them and all dependent modules.
-# If a module cannot be unloaded (e.g. it's in use), an error is
-# returned.
+# remove all lustre modules.  Won't succeed if they're in use, or if you
+# manually did a 'lctl network up'.
 ###############################################################################
 
-# Unload all modules dependent on $1 (exclude removal of $1)
-unload_dep_modules_exclusive() {
-       local MODULE=$1
-       local DEPS="$(lsmod | awk '($1 == "'$MODULE'") { print $4 }')"
-       for SUBMOD in $(echo $DEPS | tr ',' ' '); do
-               unload_dep_modules_inclusive $SUBMOD || return 1
-       done
-       return 0
-}
+FSTYPE=${1:-ldiskfs}
 
-# Unload all modules dependent on $1 (include removal of $1)
-unload_dep_modules_inclusive() {
-       local MODULE=$1
+TMP=${TMP:-/tmp}
+LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
+LCTL=${LCTL:-"$LUSTRE/utils/lctl"}
+[ ! -f "$LCTL" ] && export LCTL=$(which lctl 2> /dev/null)
 
-       # if $MODULE not loaded, return 0
-       lsmod | egrep -q "^\<$MODULE\>" || return 0
-       unload_dep_modules_exclusive $MODULE || return 1
-       rmmod $MODULE || return 1
-       return 0
+unload_dep_module() {
+    # libcfs                107852  17 lustre,obdfilter,ost,...
+    local MODULE=$1
+    local DEPS="$(lsmod | awk '($1 == "'$MODULE'") { print $4 }' | tr ',' ' ')"
+    for SUBMOD in $DEPS; do
+        unload_dep_module $SUBMOD
+    done
+    [ "$MODULE" = "libcfs" ] && $LCTL dk $TMP/debug >/dev/null || true
+    rmmod $MODULE 2>/dev/null || true
+    return 0
 }
 
-modules="$@"
+lsmod | grep obdclass > /dev/null && $LCTL dl
+lsmod | grep $FSTYPE > /dev/null && unload_dep_module $FSTYPE
+lsmod | grep ptlrpc > /dev/null && unload_dep_module ptlrpc
+lsmod | grep libcfs > /dev/null && unload_dep_module libcfs
 
-# To maintain backwards compatibility, ldiskfs and libcfs must be
-# unloaded if no parameters are given, or if only the ldiskfs parameter
-# is given. It's ugly, but is needed to emulate the prior functionality
-if [ -z "$modules" ]; then
-       modules="ldiskfs libcfs"
-elif [ "$modules" = "ldiskfs" ]; then
-       modules="ldiskfs libcfs"
+MODULES=$($LCTL modules | awk '{ print $2 }')
+if [ -n "$MODULES" ]; then
+    echo "Modules still loaded: "
+    echo $MODULES
+    exit 1
 fi
-
-for mod in $modules; do
-       unload_dep_modules_inclusive $mod || exit 1
-done
-
 exit 0
+