#!/bin/bash
# 
# Unload the oracleasm driver
#


# Force LC_ALL=C
export LC_ALL=C
 
USAGE="[-l <manager>] [-v]"

exec 3>/dev/null

help=
verbose=
version=
usage=
while case "$#" in 0) break ;; esac
do
    case "$1" in
    -l|--manager)
        case "$#" in 1) usage=t; break ;; esac
        shift
        ORACLE_ASMMANAGER="$1"
        ;;
    -v|--verbose)
        verbose=t
        exec 3>&2
        ;;
    -V|--version)
        version=t
        ;;
    -h|--help)
        help=t
        ;;
    *)
        usage=t
        ;;
    esac
    shift
done

# Load configuration
. oracleasm-Xshlib

if [ "$help" = "t" -o "$usage" = "t" ]
then
    usage
fi

if [ "$version" = "t" ]
then
    version
fi



#
# unload_module()
# 
unload_module()
{
    if [ "$#" -lt "1" -o -z "$1" ]
    then
        die "unload_module(): Requires an argument"
    fi

    MODNAME="$1"

    MODOUT="`awk '$1 ~ /^'$MODNAME'$/{print $1,$3;exit}' < /proc/modules 2>/dev/null`"
    if [ -z "$MODOUT" ]
    then
        return
    fi
    case "$MODOUT" in
    $MODNAME\ 0)
        ;;
    $MODNAME\ *)
        return
        ;;
    *)
        die "Error in module parsing!"
        ;;
    esac

    echo -n "Unloading module \"$MODNAME\": "
    modprobe -rs "$MODNAME" 2>&3
    if [ "$?" = 0 ]
    then
        echo "$MODNAME"
    else
        echo "failed"
        die "Unable to unload module \"$MODNAME\""
    fi

    return
}

#
# unmount_device()
# Unmount the $ORACLE_ASMMANAGER filesystem
#
unmount_device()
{
    if [ "$#" -lt "1" -o -z "$1" ]
    then
        die "mount_device(): Requires an argument"
    fi

    DEV="$1"

    ORACLE_ASMMANAGERSEARCH="`echo "$DEV" | sed -e 's/\//\\\\\//g'`"
    MOUNTOUT="`awk '$2 ~ /^'$ORACLE_ASMMANAGERSEARCH'$/{print $2; exit}' < /proc/mounts 2>/dev/null`"

    if [ -z "$MOUNTOUT" ]
    then
        return 2
    fi

    echo -n "Unmounting ASMlib driver filesystem: "
    umount "$DEV" 2>&3
    if [ $? != 0 ]
    then
        echo "failed"
        die "Unable to unmount ASMlib driver filesystem"
    fi

    echo "$DEV"

    return 0
}


unmount_device "${ORACLE_ASMMANAGER}"

unload_module "${ORACLEASM_MODNAME}"

exit 0

