#!/bin/bash
#
# lve-kmod      Bring up/down lve kernel interface
# description: load and unload lve module
#

if [ ! -f /etc/sysconfig/lve ]; then
    exit 0
fi

. /etc/sysconfig/lve

if [ -e /sys/fs/cgroup ]; then
    mount -o remount,rw /sys/fs/cgroup
    for item in freezer devices 'cpu,cpuacct' cpuset memory; do
        CGROUP_PATH="/sys/fs/cgroup/$item"
        if [ ! -d "$CGROUP_PATH" ]; then
            mkdir -p "$CGROUP_PATH"
        fi
        grep -q "$CGROUP_PATH" /proc/mounts
        if [ $? -ne 0 ]; then
            mount -t cgroup cgroup "$CGROUP_PATH" -o "$item"
        fi
    done
fi

# Check that lve is enabled.
[ "${LVE_ENABLE}" != "yes" ] && exit 0

KERNEL_UNAME=$(uname -r)

if [ ! -e "/lib/modules/$KERNEL_UNAME/extra/lve/kmodlve.ko" ] && \
[ ! -e "/lib/modules/$KERNEL_UNAME/kernel/kmodlve/kmodlve.ko" ] && \
[ ! -e "/lib/modules/$KERNEL_UNAME/kernel/lve/lve.ko" ] && \
[ ! -e "/lib/modules/$KERNEL_UNAME/extra/lve/lve.ko" ]; then
    echo "LVE module is missing"
    exit 1
fi

if [ -f "/lib/modules/$KERNEL_UNAME/extra/lve/lve.ko" ] || \
[ -f "/lib/modules/$KERNEL_UNAME/kernel/lve/lve.ko" ]; then
    MODULE_NAME=lve
else
    MODULE_NAME=kmodlve
fi

# See how we were called.
case "$1" in
  start)
        # loading LVE module
        if [ ${MODULE_NAME} = "lve" ]; then
            if [ -f /etc/sysconfig/iolimits ]; then
                . /etc/sysconfig/iolimits
                if [ "${IOLIMITS_ENABLED}" = "yes" ]; then
                    modprobe iolimits
                    touch /var/lock/subsys/iolimits
                fi
            fi
        fi
        modprobe ${MODULE_NAME}
        touch /var/lock/subsys/lve-kmod
        ;;
  stop)
        # unloading LVE module
        rmmod ${MODULE_NAME}
        rm -f /var/lock/subsys/lve-kmod
        if [ ${MODULE_NAME} = "lve" ]; then
            if [ -f /var/lock/subsys/iolimits ] ; then
                rmmod iolimits
                rm -f /var/lock/subsys/iolimits
            fi
        fi
        ;;
  *)
        echo $"Usage: $0 {start|stop}"
        exit 1
esac

exit 0
