From 8924fd8a4d35a2e4b78b767fe12e280f82bd6f39 Mon Sep 17 00:00:00 2001 From: jilles Date: Sun, 20 Nov 2016 13:44:27 +0000 Subject: [PATCH] MFC r307755: swapoff: Remove only late devices with -aL. Currently, '/etc/rc.d/swaplate stop' removes all swap devices. This can be very slow and may not even be possible if there is a lot of swap space in use. However, removing swap devices is only needed for late swap devices that may depend on daemons that subsequent shutdown steps stop. Normal swap devices such as hard disk partitions will remain available throughout the shutdown process and need not be removed. In swapoff, interpret -aL to remove late swap devices only, and use this in etc/rc.d/swaplate. The meaning of -aL in swapon remains unchanged (add all swap devices, both normal and late). PR: 187081 git-svn-id: svn://svn.freebsd.org/base/stable/10@308886 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- etc/rc.d/swaplate | 2 +- sbin/swapon/swapon.8 | 8 +++++++- sbin/swapon/swapon.c | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/etc/rc.d/swaplate b/etc/rc.d/swaplate index 64fa98900..c542a996a 100755 --- a/etc/rc.d/swaplate +++ b/etc/rc.d/swaplate @@ -11,7 +11,7 @@ name="swaplate" start_cmd='/sbin/swapon -aLq' -stop_cmd='/sbin/swapoff -aq' +stop_cmd='/sbin/swapoff -aLq' load_rc_config swap run_rc_command "$1" diff --git a/sbin/swapon/swapon.8 b/sbin/swapon/swapon.8 index ffce7d9db..51bee6834 100644 --- a/sbin/swapon/swapon.8 +++ b/sbin/swapon/swapon.8 @@ -28,7 +28,7 @@ .\" @(#)swapon.8 8.1 (Berkeley) 6/5/93 .\" $FreeBSD$ .\" -.Dd October 2, 2016 +.Dd October 21, 2016 .Dt SWAPON 8 .Os .Sh NAME @@ -98,6 +98,12 @@ will be removed, unless their .Dq noauto option is also set. If the +.Fl L +option is specified, +only swap devices with the +.Dq late +option will be removed. +If the .Fl q option is used, informational messages will not be diff --git a/sbin/swapon/swapon.c b/sbin/swapon/swapon.c index db012231d..436ccd60e 100644 --- a/sbin/swapon/swapon.c +++ b/sbin/swapon/swapon.c @@ -176,6 +176,10 @@ main(int argc, char **argv) strstr(fsp->fs_mntops, "late") && late == 0) continue; + if (which_prog == SWAPOFF && + strstr(fsp->fs_mntops, "late") == NULL && + late != 0) + continue; swfile = swap_on_off(fsp->fs_spec, 1, fsp->fs_mntops); if (swfile == NULL) { -- 2.42.0