#!/bin/bash

. /etc/default/ubuntu-laptop-mode

shopt -s nullglob;

MAX_AGE=$((MAX_AGE * 100));

case "$1" in
    start)
    echo "Starting laptop mode"
    echo 5 >/proc/sys/vm/laptop_mode
    
    ORIG_DIRTY_RATIO=$(cat /proc/sys/vm/dirty_ratio)
    ORIG_DIRTY_BACKGROUND_RATIO=$(cat /proc/sys/vm/dirty_background_ratio)
    ORIG_DIRTY_WRITEBACK_CENTISECS=$(cat /proc/sys/vm/dirty_writeback_centisecs)
    ORIG_DIRTY_EXPIRE_CENTISECS=$(cat /proc/sys/vm/dirty_expire_centisecs)

    echo "ORIG_DIRTY_RATIO=$ORIG_DIRTY_RATIO" > /var/run/ubuntu-laptop-mode
    echo "ORIG_DIRTY_BACKGROUND_RATIO=$ORIG_DIRTY_BACKGROUND_RATIO" >>/var/run/ubuntu-laptop-mode
    echo "ORIG_DIRTY_WRITEBACK_CENTISECS=$ORIG_DIRTY_WRITEBACK_CENTISECS" >>/var/run/ubuntu-laptop-mode
    echo "ORIG_DIRTY_EXPIRE_CENTISECS=$ORIG_DIRTY_EXPIRE_CENTISECS" >>/var/run/ubuntu-laptop-mode

    echo $DIRTY_RATIO >/proc/sys/vm/dirty_ratio
    echo $DIRTY_BACKGROUND_RATIO >/proc/sys/vm/dirty_background_ratio
    echo $MAX_AGE >/proc/sys/vm/dirty_writeback_centisecs
    echo $MAX_AGE >/proc/sys/vm/dirty_expire_centisecs

    cat /proc/mounts | while read DEV MP FST OPTS DUMP PASS; do	
	if [ $NOATIME -eq 1 ]; then
	    case "$FST" in
		"ext3"|"reiserfs")
		mount -o noatime,commit=$((MAX_AGE / 100)),remount $DEV
		;;
		"xfs")
		mount -o noatime,remount $DEV
	    esac
	fi
	if [ -b $DEV ]; then
	    blockdev --setra $(($READAHEAD * 2)) $DEV;
	fi
    done
    if [ $DO_HD -eq 1 ]; then
	for dev in /sys/block/sd* /sys/block/hd*; do	    
	    dev=/dev/$(basename $dev);
	    hdparm -S $SPINDOWN $dev >/dev/null 2>&1;
	    hdparm -B 1 $dev >/dev/null 2>&1;
	    hdparm -M 128 $dev >/dev/null 2>&1;
	done
    fi
    ;;
    
    stop)    
    echo "Stopping laptop mode"

    echo 0 >/proc/sys/vm/laptop_mode

    if [ -f /var/run/ubuntu-laptop-mode ]; then
	. /var/run/ubuntu-laptop-mode
	echo $ORIG_DIRTY_RATIO >/proc/sys/vm/dirty_ratio;
	echo $ORIG_DIRTY_BACKGROUND_RATIO >/proc/sys/vm/dirty_background_ratio
	echo $ORIG_DIRTY_WRITEBACK_CENTISECS >/proc/sys/vm/dirty_writeback_centisecs
	echo $ORIG_DIRTY_EXPIRE_CENTISECS >/proc/sys/vm/dirty_expire_centisecs
    fi

    cat /proc/mounts | while read DEV MP FST OPTS DUMP PASS; do
	if [ $NOATIME -eq 1 ]; then 
	    case "$FST" in
		"ext3"|"reiserfs")
		mount -o atime,commit=0,remount $DEV
		;;
		"xfs")
		mount -o atime,remount $DEV
	    esac
	fi
	if [ -b $DEV ]; then
	    blockdev --setra 256 $DEV;
	fi
    done
    if [ $DO_HD -eq 1 ]; then
	for dev in /sys/block/sd* /sys/block/hd*; do
	    dev=/dev/$(basename $dev);
	    hdparm -S 0 $dev >/dev/null 2>&1;
	    hdparm -B 255 $dev >/dev/null 2>&1;
	    hdparm -M 0 $dev >/dev/null 2>&1;
	done
    fi    
    ;;
esac
	