From 34714bf34e5928479e5ec4367e5e79902876dfa3 Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sat, 29 Oct 2011 17:26:26 +0200 Subject: swapoff: umount swap-backed fs before switching off swap 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. v3: fixed some regressions in v2, made 'API filesystems' less general 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 Cc: C Anthony Risinger Signed-off-by: Tom Gundersen --- functions | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'functions') diff --git a/functions b/functions index 05d8f56..445391b 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|dev/pts) ]]; 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 / | tac) + + umount -r ${mounts[@]} + +} + remove_leftover() { stat_busy "Removing Leftover Files" # handle this separately until we declare the non-symlinks obsoleted -- cgit v1.2.3