Whamcloud - gitweb
8c07f783a8216114b0c4bc176909d4596b8ee5a6
[fs/lustre-release.git] / lustre / scripts / lustre_rmmod
1 #!/bin/sh
2 #
3 # remove all lustre modules.  Won't succeed if they're in use, or if you
4 # manually did a 'lctl network up'.
5 ###############################################################################
6
7 FSTYPE=${1:-ldiskfs}
8
9 TMP=${TMP:-/tmp}
10 LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
11 LCTL=${LCTL:-"$LUSTRE/utils/lctl"}
12 [ ! -f "$LCTL" ] && export LCTL=$(which lctl 2> /dev/null)
13
14 RMMOD=rmmod
15 if [ `uname -r | cut -c 3` -eq 4 ]; then
16     RMMOD="modprobe -r"
17 fi
18
19 unload_dep_module() {
20     # libcfs                107852  17 llite_lloop,lustre,obdfilter,ost,...
21     local MODULE=$1
22     local DEPS="$(lsmod | awk '($1 == "'$MODULE'") { print $4 }' | tr ',' ' ')"
23     for SUBMOD in $DEPS; do
24         unload_dep_module $SUBMOD
25     done
26     [ "$MODULE" = "libcfs" ] && $LCTL dk $TMP/debug >/dev/null || true
27     $RMMOD $MODULE 2>/dev/null || true
28     return 0
29 }
30
31 lsmod | grep obdclass > /dev/null && $LCTL dl
32 lsmod | grep $FSTYPE > /dev/null && unload_dep_module $FSTYPE
33 lsmod | grep ptlrpc > /dev/null && unload_dep_module ptlrpc
34 lsmod | grep libcfs > /dev/null && unload_dep_module libcfs
35
36 MODULES=$($LCTL modules | awk '{ print $2 }')
37 if [ -n "$MODULES" ]; then
38     echo "Modules still loaded: "
39     echo $MODULES
40     exit 1
41 fi
42 exit 0
43