[arch-projects] [initscripts][PATCH] swapoff: umount swap-backed fs before switching off swap

Tom Gundersen teg at jklm.no
Mon Oct 31 06:27:43 EDT 2011


Factor out umounting. Explicitly skip umounting API directories, rather
than matching on fs type. This allows us to e.g. unmount all tmpfs but leaving
/run and /dev/shm alone.

v2: new umount_all implementation based on proposal by Dave and input from
Anthony. Also, ignore ramfs as it is not backed by swap.

Cc: Dave Reisner <d at falconindy.com>
Cc: C Anthony Risinger <anthony at xtfx.me>
Signed-off-by: Tom Gundersen <teg at jklm.no>
---
 functions   |   30 ++++++++++++++++++++++++++++++
 rc.shutdown |    9 ++++-----
 2 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/functions b/functions
index 05d8f56..a7d8204 100644
--- a/functions
+++ b/functions
@@ -460,6 +460,36 @@ mount_all() {
 	mount -a -t "nosysfs,no${NETFS//,/,no}" -O no_netdev
 }
 
+umount_all() {
+	# $1: restrict to fstype
+
+	local mounts
+
+	while read -r target fstype options; do
+
+		# match only targetted fstypes
+		if [[ $1 && $1 != "$fstype" ]]; then
+			continue
+		fi
+
+		# don't unmount API filesystems
+		if [[ $target = /@(proc|sys|run|dev)?(/*) ]]; then
+			continue
+		fi
+
+		# avoid networked devices
+		IFS=, read -ra opts <<< "$options"
+		if in_array _netdev "${opts[@]}"; then
+			continue
+		fi
+
+		mounts+=("$target")
+	done < <(findmnt -runRo TARGET,FSTYPE,OPTIONS -d backward /)
+
+	umount -r $mounts
+
+}
+
 remove_leftover() {
 	stat_busy "Removing Leftover Files"
 		# handle this separately until we declare the non-symlinks obsoleted
diff --git a/rc.shutdown b/rc.shutdown
index 1946068..86ff799 100755
--- a/rc.shutdown
+++ b/rc.shutdown
@@ -50,16 +50,15 @@ kill_all
 
 run_hook shutdown_postkillall
 
-# TODO: unmount any non-api partitions that are backed by swap, we don't want to
-#       move their contents into memory (waste of time and might caues OOM).
+# unmount any non-api partitions that are backed by swap, we don't want to
+# move their contents into memory (waste of time and might caues OOM).
+status "Unmounting Swap-backed Filesystems" umount_all "tmpfs"
 
 # almost everything is dead now, so the swap should hopefully be relatively
 # empty, and quick to switch off
 status "Deactivating Swap" swapoff -a
 
-# if we don't have devtmpfs support, /dev is mounted as tmpfs, so don't unmount it
-status "Unmounting Filesystems" \
-	umount -a -r -t nodevtmpfs,notmpfs,nosysfs,noproc,nodevpts -O no_netdev
+status "Unmounting Non-API Filesystems" umount_all
 
 run_hook shutdown_postumount
 
-- 
1.7.7.1



More information about the arch-projects mailing list