aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--init.d/Makefile4
-rw-r--r--init.d/swap.in11
-rw-r--r--init.d/swapfiles.in45
-rw-r--r--runlevels/Makefile2
4 files changed, 58 insertions, 4 deletions
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 <roy@marples.name>
+# 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}}