On Tue, 08 Aug 2017 09:10:53 -0400 "Ian D. Leroux" <[email protected]> wrote:
> On Thu, Aug 3, 2017, at 08:00, Ian D. Leroux wrote: > > On Thu, 3 Aug 2017 10:54:30 +0000 (UTC) [email protected] > > (Christos Zoulas) wrote: > > > > > In article <[email protected]>, > > > Ian D. Leroux <[email protected]> wrote: > > > >The patches stop swap1_stop from blindly unmounting a > > > >tmpfs-mounted /dev/while the system is still running multi-user. > > > > > > [...] > > > > > > Why not just skip /dev? I append a patch that does just that (almost identical to the code you suggested, except that I'm a bit more paranoid when parsing the name of the mount point). I've tested it lightly, but my current system only has /var/shm on tmpfs. However, after taking a closer look at /etc/rc.d/swap2, I no longer understand why /etc/rc.d/swap1 has to unmount any filesystem, ever. As I understood it, the rationale ran: - swap can live in files, so we must remove swap before unmounting filesystems - tmpfs can live in swap, and if it is large then it may exceed available (non-swap) RAM, so we must remove the tmpfs filesystems before removing swap. However, all the swap that lives in the filesystem (i.e. non-block-type swap devices) is removed by /etc/rc.d/swap2, while the critical filesystems are still mounted. By the time swap1_stop() runs, most of the filesystem (and any swap that lived in files) is already gone. Why can't we then just leave the (remaining, block-type) swap configured until the system goes down? And if we do need to unmount tmpfs filesystems, why are we doing it in swap1_stop() after we've already (potentially) unmounted a chunk of (file-backed) swap rather than in swap2, before we start removing swap devices? Yours in growing perplexity, -- IDL --- /etc/rc.d/swap1.orig 2017-02-28 06:51:12.737058550 -0500 +++ /etc/rc.d/swap1 2017-08-08 20:50:55.065104788 -0400 @@ -13,6 +13,26 @@ start_cmd="swap1_start" stop_cmd="swap1_stop" +umount_tmpfs() +{ + echo -n "Forcibly unmounting tmpfs filesystems:" + mount -t tmpfs | while read -r line + do + dir=${line#tmpfs on } + dir=${dir% type tmpfs*} + case "$dir" in + /dev) + echo -n " [skipping $dir]" + ;; + *) + echo -n " $dir" + umount -f "$dir" + ;; + esac + done + echo "." +} + # Add all block-type swap devices; these might be necessary # during disk checks. # @@ -31,8 +51,7 @@ swap1_stop() { if checkyesno swapoff || [ -n "$rc_force" ]; then - echo "Forcibly unmounting tmpfs filesystems" - umount -aft tmpfs + umount_tmpfs echo "Removing block-type swap devices" swapctl -U -t blk || [ $? = 2 ] fi
