On Tue, 08 Aug 2017 09:10:53 -0400 "Ian D. Leroux"
<idler...@fastmail.fm> wrote:

> On Thu, Aug 3, 2017, at 08:00, Ian D. Leroux wrote:
> > On Thu, 3 Aug 2017 10:54:30 +0000 (UTC) chris...@astron.com
> > (Christos Zoulas) wrote:
> >
> > > In article <20170802215811.02ff2faba38001ebe4f53...@fastmail.fm>,
> > > Ian D. Leroux <idler...@fastmail.fm> 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



Reply via email to