#!/bin/sh
#
# Compcache startup script
#
# chkconfig: 2345 26 59
#
# description: Compcache uses part of the RAM as a compressed swap device
#
### BEGIN INIT INFO
# Provides: compcache
# Default-Start: 2 3 4 5
# Short-Description: Compcache service
# Description: Compcache uses part of the RAM as a compressed swap device
### END INIT INFO

. /lib/lsb/init-functions

[ -f /etc/ublinux/services/compcache ] && . /etc/ublinux/services/compcache

NUM_DEVICES=${NUM_DEVICES:-4}
[ -z "$ZRAMSIZE" ] && ZRAMSIZE=$(($(free -b | grep -m1 -i ^mem: | awk '{print $2}') /4))
GPRINTF=gprintf
[ -f /etc/init.d/functions ] || GPRINTF=log_daemon_msg

case "$1" in
  start)
        $GPRINTF "Loading compcache: "
        /sbin/modprobe zram num_devices=$NUM_DEVICES && \
           echo $ZRAMSIZE > /sys/block/zram0/disksize && \
           mkswap /dev/zram0 >/dev/null 2>&1 && \
           swapon /dev/zram0
        RETVAL=$?
        if [ $RETVAL = 0 ]; then
            log_success_msg $"%s startup" "$base"
        else
            log_failure_msg $"%s startup" "$base"
        fi
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/compcache
        ;;
  stop)
        $GPRINTF "Stopping compcache: "
        test -e /dev/zram0 &&  swapoff /dev/zram0 && sleep 0.5 && rmmod zram
        RETVAL=$?
        if [ $RETVAL = 0 ]; then
            log_success_msg $"%s stop" "$base"
        else
            log_failure_msg $"%s stop" "$base"
        fi
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/compcache
        ;;
  status)
        swapon -s | grep -q /dev/zram0
        RETVAL=$?
        ;;
  restart|reload)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: $0 {start|stop|status|restart}"
        RETVAL=1
        ;;
esac

exit $RETVAL
