summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2016-11-20 13:44:27 +0000
committerjilles <jilles@FreeBSD.org>2016-11-20 13:44:27 +0000
commitf40dc50ad2f89e81e3e36797a4771a529126b76c (patch)
tree1d6e455c2ac5f7dac0f8fd66994c90c6d3f63843
parent9b8a89b75060dd9ad7df57e8ea1ac8bf87ef1549 (diff)
downloadFreeBSD-src-f40dc50ad2f89e81e3e36797a4771a529126b76c.zip
FreeBSD-src-f40dc50ad2f89e81e3e36797a4771a529126b76c.tar.gz
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
-rwxr-xr-xetc/rc.d/swaplate2
-rw-r--r--sbin/swapon/swapon.88
-rw-r--r--sbin/swapon/swapon.c4
3 files changed, 12 insertions, 2 deletions
diff --git a/etc/rc.d/swaplate b/etc/rc.d/swaplate
index 64fa989..c542a99 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 ffce7d9..51bee68 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 db01223..436ccd6 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) {
OpenPOWER on IntegriCloud