diff --git a/init.d/Makefile b/init.d/Makefile index 8351f3c5..863864f2 100644 --- a/init.d/Makefile +++ b/init.d/Makefile @@ -1,7 +1,7 @@ DIR= ${INITDIR} SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \ - network.in root.in savecache.in staticroute.in swap.in swclock.in \ - sysctl.in urandom.in ${SRCS-${OS}} + network.in root.in savecache.in staticroute.in swap.in swapfiles.in \ + swclock.in sysctl.in urandom.in ${SRCS-${OS}} BIN= ${OBJS} INSTALLAFTER= _installafter_net.lo diff --git a/init.d/swap.in b/init.d/swap.in index bd20ffec..bdc5dc71 100644 --- a/init.d/swap.in +++ b/init.d/swap.in @@ -4,7 +4,7 @@ depend() { - need localmount + before localmount keyword -jail -openvz -prefix -vserver -lxc } @@ -12,6 +12,15 @@ start() { ebegin "Activating swap devices" case "$RC_UNAME" in + Linux) + local dev + for dev in $(fstabinfo -b -t swap); do + case "$dev" in + /dev/loop*) ;; + *) swapon $dev 2>/dev/null;; + esac + done + ;; NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;; *) swapon -a >/dev/null;; esac diff --git a/init.d/swapfiles.in b/init.d/swapfiles.in new file mode 100644 index 00000000..f46f3c86 --- /dev/null +++ b/init.d/swapfiles.in @@ -0,0 +1,45 @@ +#!@PREFIX@/sbin/runscript +# Copyright (c) 2007-2009 Roy Marples +# Released under the 2-clause BSD license. + +depend() +{ + need localmount + keyword -jail -openvz -prefix -vserver -lxc +} + +start() +{ + ebegin "Activating additional swap space" + case "$RC_UNAME" in + NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;; + *) swapon -a >/dev/null;; + esac + eend 0 # If swapon has nothing todo it errors, so always return 0 +} + +stop() +{ + ebegin "Deactivating additional swap space" + + # Try to unmount all tmpfs filesystems not in use, else a deadlock may + # occur. As $RC_SVCDIR may also be tmpfs we cd to it to lock it + # fixme: Do we need this here since we are only unmounting swap files + # and loopback swap? + cd "$RC_SVCDIR" + umount -a -t tmpfs 2>/dev/null + + case "$RC_UNAME" in + Linux) + while read filename type rest; do + case "$type" in + file) swapoff $filename >/dev/null;; + esac + case "$filename" in + /dev/loop*) swapoff $filename >/dev/null;; + esac + done < /proc/swaps + ;; + esac + eend 0 +} diff --git a/runlevels/Makefile b/runlevels/Makefile index c1a9f096..1573572e 100644 --- a/runlevels/Makefile +++ b/runlevels/Makefile @@ -1,5 +1,5 @@ BOOT= bootmisc fsck hostname localmount \ - root swap sysctl urandom ${BOOT-${OS}} + root swap swapfiles sysctl urandom ${BOOT-${OS}} DEFAULT= local netmount SHUTDOWN= savecache ${SHUTDOWN-${OS}} SYSINIT= ${SYSINIT-${OS}}