#!/bin/sh

#ident "$script: unload-dlm Build 5.93.0.7 07/07/11 17:00:00 $"

#----------------------------------------------------------------------------#
# PRODUCT :  HDLM Driver 0501                                                #
#----------------------------------------------------------------------------#
# NAME :     unload-dlm                                                      #
# FUNCTION : Scripts for HDLM shutdown steps                                 #
# INSTANCE :                                                                 #
# MEMO :                                                                     #
# DATE :     2003/06/07                                                      #
# AUTHOR :   Bharvi Oak                                          	         #
# HISTORY :                                                                  #
#                                                                            #
#@ All Rights Reserved, Copyright (C) 2003,2007 Hitachi, Ltd.	             #
#----------------------------------------------------------------------------#

# REVAMP ACTIVITY PERFORMED. SO ALL PREVIOUS FDOCS & COMMENTS ARE REMOVED. PLEASE LOOKUP 
# PREVIOUS VERSIONS CODES FOR REFERENCE.

# This script is called from /etc/rc.d/rc.sysinit.
# This script will not run individually from command line
# because it requires a prior sourcing of /etc/rc.d/init.d/functions in the same shell.

 if [ -f /etc/redhat-release ]; then
    if [ -f /etc/sysconfig/hdlm-scripts/common-defines ]; then
        . /etc/sysconfig/hdlm-scripts/common-defines
    else
        failure $"Attempting to source /etc/sysconfig/hdlm-scripts/common-defines: "
        return
    fi
elif [ -f /etc/SuSE-release ]; then
    . /etc/rc.status
     rc_reset
    if [ -f /etc/sysconfig/hdlm-scripts/common-defines ]; then
        . /etc/sysconfig/hdlm-scripts/common-defines
    else
        /bin/logger -t unload-dlm "Attempting to source /etc/sysconfig/hdlm-scripts/common-defines:  failed"
        rc_failed
        rc_status	
        return
    fi
fi

MDLIST=""
VGLIST=""


    #######################################################################
    #TO GET THE LIST OF MDS                                               #  
    #######################################################################

    getmds()
    {
    if [ -s $RAIDTAB ] ; then
          MDCOUNT=`$CMD_GREP -c "^[ 	]*raiddev" $RAIDTAB`
          if [ $MDCOUNT -ne 0 ]; then 
            while read line; do 
                $CMD_ECHO $line | $CMD_GREP "^[ 	]*raiddev" > /dev/null 2>&1
                    if [ $? -eq 0 ]; then
                        TMPMDLIST=`$CMD_ECHO $line | $CMD_GREP "^[   ]*raiddev" | $CMD_GAWK '{print $2}'` 
                        STATUS_FLAG=TRUE
                    fi
                if [ "$STATUS_FLAG" != "FALSE" ]; then
                $CMD_ECHO $line | $CMD_GREP "^[     ]*device" |  $CMD_GREP "sddlm[a-p][a-p]"  > /dev/null 2>&1 
                    if [ $? -eq 0 ]; then  
                        MDLIST="$MDLIST $TMPMDLIST"
                        TMPMDLIST=" "
                    STATUS_FLAG=FALSE  
                    fi
                fi
            done < $RAIDTAB
        fi #end of MDCOUNT
    fi #end of raidtab
    }

    #############################################################################
    # Get the VGs for the HDLM device  start                                    #
    #############################################################################

    getvgs()
    {
    MDFOUND=0
    if [ -d /proc/lvm ];then
    VGLIST=""
        if [ -d "/proc/lvm/VGs" ];then
            for j in `$CMD_LS -A /proc/lvm/VGs/`
            do
                if [ -d "/proc/lvm/VGs/$j/PVs" ];then		
                for k in `$CMD_LS -A /proc/lvm/VGs/$j/PVs/`
                
                do
                    PVDEVICE=`$CMD_GAWK '{if ($1=="name:") print $2}' /proc/lvm/VGs/$j/PVs/$k`
                    for l in $MDLIST
                    do
                        $CMD_ECHO $PVDEVICE | $CMD_GREP $l >/dev/null 2>&1
                        if [ $? -eq 0 ];then
                            VGLIST="$VGLIST /dev/$j" 
                            MDFOUND=1
                            break
                        fi
                    done
                    if [ $MDFOUND -eq 1 ];then
                        break;
                    fi
                done
                fi
            done
            fi
    fi
    }
    # Get the VGs for the HDLM device  end                                      #
    #############################################################################

    #############################################################################
    # Start of Main script                                                      #
    #############################################################################

    if [ -f /etc/redhat-release ]; then

        RAIDTAB=/etc/raidtab
        #Get all md devices present in the /etc/raidtab file
        getmds
	#LVM2 AS4 U1 start
	if [ $KERNEL_2_4 ]; then
	      #Get all vg devices present in the /dev/vg
        	getvgs
	elif [ $KERNEL_2_6 ]; then
                VGLIST=`/sbin/lvm.static pvs --separator ':' 2>/dev/null | $CMD_GREP "sddlm" | $CMD_GAWK -F":" '{print $2}' | $CMD_SORT -u`
		for mddev in $MDLIST
		do
			VGTMP=`/sbin/lvm.static pvs --separator ':'  2>/dev/null | $CMD_GREP "$mddev" | $CMD_GAWK -F":" '{print $2}' | $CMD_SORT -u`
			VGLIST=`$CMD_ECHO -e "$VGLIST\n$VGTMP"`
		done
		VGLIST=`$CMD_ECHO -e "$VGLIST" | $CMD_SORT -u`
        fi	
        #LVM2 AS4 U1 end
        

	#Unmount all the mounted vg-hdlm devices
        for vgdev in $VGLIST 
        do
            $CMD_UMOUNT -f `$CMD_CAT /proc/mounts | $CMD_GREP $vgdev | $CMD_GAWK -F" " '{print $1}'` > /dev/null 2>&1
        done

        #Unmount all the mounted md-hdlm devices
        for mddev in $MDLIST
        do
            $CMD_UMOUNT -f `$CMD_CAT /proc/mounts | $CMD_GREP $mddev | $CMD_GAWK -F" " '{print $1}'` > /dev/null 2>&1
        done

        #Unmount all the mounted hdlm devices
        $CMD_UMOUNT -f `$CMD_CAT /proc/mounts | $CMD_GREP "/dev/sddlm[a-p][a-p]" | $CMD_GAWK -F" " '{print $1}'` > /dev/null 2>&1

        ###unmounting of HDLM device for 32 bit AS 3/ES 3 end
        #############################################################################
        # Umounting of HDLM devices MD devices  and  LVs  End                       #
        #############################################################################


        ##############################################################################
        #Unload LVM ...start                                                         #
        ##############################################################################

        if [ -e /proc/lvm -a -x $CMD_VGCHANGE -a -f /etc/lvmtab ]; then
        for i in $VGLIST
        do
            
                VGNAME=`$CMD_BASENAME $i`
                    
                $CMD_VGCHANGE -an $VGNAME 
        done 
	#LVM2 AS4 U1 start
	else
		if [ $KERNEL_2_6 ]; then
			/sbin/lvm.static vgchange -a n > /dev/null 2>&1
		fi
	#LVM2 AS4 U1 end
        fi
        ##############################################################################
        #Unload LVM ...end                                                           #
        ##############################################################################

        ##############################################################################
        # RAIDSTOP of md devices created on HDLM...start                             #
        ##############################################################################
        if [  -f /proc/mdstat -a -x $CMD_RAIDSTOP ]; then
        for i in $MDLIST
        do
                $CMD_RAIDSTOP $i 
             
        done
        fi
        ##############################################################################
        # RAIDSTOP of md devices created on HDLM...end                               #
        ##############################################################################
        # HDLMUNLOAD - Steps to unload HDLM drivers start here - Do Not Edit

        # START BFS : Checking of HDLM - BFS starts here
        $CMD_MOUNT | $CMD_GREP -w "/" | $CMD_GREP "/dev/sddlm[a-p][a-p]" >/dev/null 2>&1
        if [ $? -ne 0 ]
        then
        # END BFS : Checking of HDLM - BFS starts here

            if $CMD_LSMOD | $CMD_GREP -q $FILTERDRV; then
                if [ $KERNEL_2_4 ]; then
                    runcmd $"Unloading HDLM Filter driver" $CMD_RMMOD $FILTERDRV	
                elif [ $KERNEL_2_6 ] && [ $AS5_FLAG -eq 1 ]; then
                    action $"Unloading HDLM Filter driver" $CMD_MODPROBE -r $FILTERDRV
                else
                    runcmd $"Unloading HDLM Filter driver" $CMD_MODPROBE -r $FILTERDRV
                fi
            fi

            if $CMD_LSMOD | $CMD_GREP -q $ALERTDRV; then
                if [ "TRUE" = "$USE_INS_RM_MOD_SCRIPT" ]; then
                    if [ -x $DLM_RMMOD_Alert ]; then
			if [ $AS5_FLAG -eq 1 ]; then
			    action $"Unloading HDLM Alert driver" $DLM_RMMOD_Alert
			else
			    runcmd $"Unloading HDLM Alert driver" $DLM_RMMOD_Alert
		        fi
                    else
                        $CMD_ECHO -n $"Unloading HDLM Alert driver"
                        failure $"Unloading HDLM Alert driver"
                        $CMD_ECHO
                        $CMD_ECHO "Script execution failed, scriptname=$DLM_RMMOD_Alert"
                    fi
                else
                    runcmd $"Unloading HDLM Alert driver" $CMD_RMMOD $ALERTDRV
                fi
            fi
            if [ -d $DLMCTRLDIR ] || $CMD_LS /dev | $CMD_GREP -q $DLMBLKDEV || $CMD_LS /dev | $CMD_GREP -q $DLMCHRDEV ; then 
                $CMD_ECHO -n $"Removing HDLM devices"
                if [ "$BOOTUP" = "color" ]; then
                    $DLMCfgMgr -d -s > /dev/null 2>&1 && echo_success || echo_failure
                else
                    $DLMCfgMgr -d -s > /dev/null 2>&1
                fi
                $CMD_ECHO
            fi

        #   START BFS : Checking of HDLM - BFS endss here
        fi
        #   END BFS : Checking of HDLM - BFS ends here


    # HDLMUNLOAD steps end here
    else

        if [ -f /etc/SuSE-release ]; then
                
          if [ $KERNEL_2_4 ]; then  
            RAIDTAB=/etc/raidtab

            #Get md-device list from /etc/raidtab
            getmds

            #Get vg-device list 
            getvgs

            for vgdev in $VGLIST 
            do
                $CMD_UMOUNT -f `$CMD_CAT /proc/mounts | $CMD_GREP $vgdev | $CMD_GAWK -F" " '{print $1}'` > /dev/null 2>&1
            done

            #Unmounting of MDs on HDLM
            for mddev in $MDLIST
            do
                $CMD_UMOUNT -f `$CMD_CAT /proc/mounts | $CMD_GREP $mddev | $CMD_GAWK -F" " '{print $1}'` > /dev/null 2>&1
            done

            #Unmounting of sddlm 
            $CMD_UMOUNT -f `$CMD_CAT /proc/mounts | $CMD_GREP "/dev/sddlm[a-p][a-p]" | $CMD_GAWK -F" " '{print $1}'` > /dev/null 2>&1

            ###unmounting of HDLM device for Suse end
            #############################################################################
            # Umounting of HDLM devices MD devices  and  LVs  End                       #
            #############################################################################


            ##############################################################################
            #Unload LVM ...start                                                         #
            ##############################################################################
            if [ -e /proc/lvm -a -x $CMD_VGCHANGE -a -f /etc/lvmtab ]; then
                for i in $VGLIST
                do
                        VGNAME=`$CMD_BASENAME $i`
                        $CMD_VGCHANGE -an $VGNAME 
                done 
            fi
            ##############################################################################
            #Unload LVM ...end                                                           #
            ##############################################################################

            ##############################################################################
            # RAIDSTOP of md devices created on HDLM...start                             #
            ##############################################################################

            if [  -f /proc/mdstat -a -x $CMD_RAIDSTOP ]; then
                for i in $MDLIST
                do
                    $CMD_RAIDSTOP $i 
                     
                done
            fi
            ##############################################################################
            # RAIDSTOP of md devices created on HDLM...end                               #
            ##############################################################################

            . /etc/rc.status
            rc_reset
    
            # HDLMUNLOAD - Steps to unload HDLM drivers start here - Do Not Edit


            #   START BFS : Checking of HDLM - BFS starts here
            $CMD_MOUNT | $CMD_GREP -w "/" | $CMD_GREP "/dev/sddlm[a-p][a-p]" >/dev/null 2>&1
            if [ $? -ne 0 ]
            then
            #   END BFS : Checking of HDLM - BFS starts here

                if $CMD_LSMOD | $CMD_GREP -q $FILTERDRV; then
                    $CMD_ECHO -n "Unloading HDLM Filter driver "
                    $CMD_RMMOD $FILTERDRV && rc_status || rc_failed
                    rc_status -v
                fi
                rc_reset
                /etc/init.d/DLMManager shutdown

                if $CMD_LSMOD | $CMD_GREP -q $ALERTDRV; then
                    $CMD_ECHO -n "Unloading HDLM Alert driver "
                    if [ "TRUE" = "$USE_INS_RM_MOD_SCRIPT" ]; then
                        if [ -x $DLM_RMMOD_Alert ]; then
                            $DLM_RMMOD_Alert && rc_status || rc_failed
                            rc_status -v 
                        else
                            rc_failed
                            rc_status -v
                            $CMD_ECHO "Script execution failed, scriptname=$DLM_RMMOD_Alert"
                        fi
                    else
                        $CMD_RMMOD $ALERTDRV && rc_status || rc_failed
                        rc_status -v 
                    fi
                fi
                rc_reset
                if [ -d $DLMCTRLDIR ] || $CMD_LS /dev | $CMD_GREP -q $DLMBLKDEV || $CMD_LS /dev | $CMD_GREP -q $DLMCHRDEV ; then 
                    $CMD_ECHO -n $"Removing HDLM devices"
                        $DLMCfgMgr -d -s > /dev/null 2>&1 && rc_status || rc_failed 
                        rc_status -v
                fi

            #   START BFS : Checking of HDLM - BFS ends here
            fi
            #   END BFS : Checking of HDLM - BFS endss here

            # HDLMUNLOAD steps end here
            rc_exit
    
        elif [ $KERNEL_2_6 ]; then  # Suse KERNEL 2.6 part

            . /etc/rc.status
            rc_reset

            #As the system is mounted as read only, remounitng it as read-write 
            $CMD_MOUNT -n -o remount,rw / > /dev/null 2>&1

            $CMD_VGCHANGE -a n
            rc_reset
            # HDLMUNLOAD - Steps to unload HDLM drivers start here - Do Not Edit

            if $CMD_LSMOD | $CMD_GREP -q $FILTERDRV; then
                $CMD_ECHO -n "Unloading HDLM Filter driver "
                $CMD_RMMOD $FILTERDRV && rc_status || rc_failed
                rc_status -v
            fi
            rc_reset

            #This call is not required for Suse 2.6 as the dlmmgr daemon is already killed by kernel
            #/etc/init.d/DLMManager stop

            if $CMD_LSMOD | $CMD_GREP -q $ALERTDRV; then
                $CMD_ECHO -n "Unloading HDLM Alert driver "
                if [ "TRUE" = "$USE_INS_RM_MOD_SCRIPT" ]; then
                    if [ -x $DLM_RMMOD_Alert ]; then
                        $DLM_RMMOD_Alert && rc_status || rc_failed
                        rc_status -v 
                    else
                        rc_failed
                        rc_status -v
                        $CMD_ECHO "Script execution failed, scriptname=$DLM_RMMOD_Alert"
                    fi
                else
                    $CMD_RMMOD $ALERTDRV && rc_status || rc_failed
                    rc_status -v 
                fi
            fi
            rc_reset
            if [ -d $DLMCTRLDIR ] || $CMD_LS /dev | $CMD_GREP -q $DLMBLKDEV || $CMD_LS /dev | $CMD_GREP -q $DLMCHRDEV ; then 
                $CMD_ECHO -n $"Removing HDLM devices"
                    $DLMCfgMgr -d -s > /dev/null 2>&1 && rc_status || rc_failed 
                    rc_status -v
            fi

            #Mounting the system as read only again
            $CMD_MOUNT -n -o remount,ro / > /dev/null 2>&1
            
            # HDLMUNLOAD steps end here
            rc_exit
          fi # fi for KERNEL_2_6 flag check  
        fi # fi for Suse-release flag
    fi # if-else for redhat release flag


