#!/bin/sh
echo "Killing all usb services"

echo "Stopping autostart services..."
/opt/etc/init.d/rc.unslungstop

sleep 1
PLIST="smbd nmbd cron transmissiond xinetd vsftpd lighttpd php-fcgi mysqld httpd screen proftpd wget syslogd mjpg_streamer"
echo "stopping selected processes"
for DISKP in $PLIST ; do
  if [ -n "`pidof $DISKP`" ]; then
    echo "stopping $DISKP"
    killall $DISKP
  fi
done
sleep 1

U=`echo "$*" | sed -n '/-u/p'`
S=`echo "$*" | sed -n '/-s/p'`
R=`echo "$*" | sed -n '/-r/p'`

UMTRY=10
UMFAIL=2
KVER=`/bin/uname -r`
if [ -n "$U" ] || [ -n "$R" ]; then
  UMFAIL=0
  # stop exports
  exportfs -au
  sleep 1
  echo "umounting disks"
  if [ "${KVER#2.6}" != "${KVER}" ]; then
    DISKS=`mount | grep "/dev/sd" | awk '{print $3}' | sort -r`
  else
    DISKS=`mount | grep "/dev/discs" | awk '{print $3}' | sort -r`
  fi
  for DISK in $DISKS ; do
    echo "shutting down disk: ${DISK}..."
    I=0
    while [ $I -lt "$UMTRY" ]; do
      let "I+=1"
      `umount -f $DISK`
      if [ "$?" -eq  0 ]; then
        break;
      fi
      sleep 1
    done
    if [ $I -eq "$UMTRY" ]; then
      echo -e "\033[1;31mFailed to umount $DISK giving up...\033[0m"
      UMFAIL=1
    fi
  done
fi

if [ -z "$S" ] || [ -n "$R" ]; then
  DISKS=`cat /proc/swaps | grep "/dev/" | awk '{print$1}' | sort -r`
  for DISK in $DISKS ; do
    echo "shutting down swap: ${DISK}..."
    swapoff $DISK
  done
fi

if [ -n "$R" ]; then
  /sbin/reboot
elif [ $UMFAIL = 0 ]; then
  echo "USB drive is safe to remove!"
fi

