From 583f578379fc028703a5e605b4bbd49c28f7e6f9 Mon Sep 17 00:00:00 2001 From: brian Date: Tue, 7 Aug 2007 17:28:07 +0000 Subject: [PATCH] Load the sg module if needed and unload it when done, only if it was loaded by sgpdd_survey. Also warn the user about the need for the sg module if we are unable to find an SG device for a block device. --- lustre-iokit/sgpdd-survey/sgpdd-survey | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/lustre-iokit/sgpdd-survey/sgpdd-survey b/lustre-iokit/sgpdd-survey/sgpdd-survey index 6a62300..db40392 100755 --- a/lustre-iokit/sgpdd-survey/sgpdd-survey +++ b/lustre-iokit/sgpdd-survey/sgpdd-survey @@ -41,12 +41,26 @@ thrhi=${thrhi:-4096} # and max # threads one instance will spawn SG_MAX_QUEUE=16 +# is the sg module loaded? +sg_is_loaded=$(grep -q "^sg " /proc/modules && echo true || echo false) + +# did we load it? +sg_was_loaded=false + # map given device names into SG device names i=0 devs=() if [ "$scsidevs" ]; then # we will test for a LUN, the test for a partition # if the partition number is > 9 this will fail + + # make sure sg kernel module is loaded + if ! $sg_is_loaded; then + echo "loading the sg kernel module" + modprobe sg && sg_was_loaded=true + sg_is_loaded=true + fi + for d in $scsidevs; do devs[$i]=`sg_map | awk "{if (\\\$2 == \"$d\") print \\\$1}"` if [ -z "${devs[i]}" ]; then @@ -55,7 +69,7 @@ if [ "$scsidevs" ]; then # Try again devs[$i]=`sg_map | awk "{if (\\\$2 == \"$pt\") print \\\$1}"` if [ -z "${devs[i]}" ]; then - echo "Can't find SG device $pt" + echo -e "Can't find SG device $pt.\nDo you have the sg module configured for your kernel?" exit 1 fi fi @@ -191,3 +205,8 @@ for ((rsz=$rszlo;rsz<=$rszhi;rsz*=2)); do done done done + +if $sg_was_loaded; then + echo "unloading sg module" + rmmod sg +fi -- 1.8.3.1