diff options
author | crees <crees@FreeBSD.org> | 2013-06-12 16:44:17 +0000 |
---|---|---|
committer | crees <crees@FreeBSD.org> | 2013-06-12 16:44:17 +0000 |
commit | 5219f99e6a6b2825f119d9181112455eacffa110 (patch) | |
tree | 0e7fe8efeedf506398362edf9939ba4877755a22 | |
parent | efd62e8968170842115fd3214dacd8c6daca3e19 (diff) | |
download | FreeBSD-src-5219f99e6a6b2825f119d9181112455eacffa110.zip FreeBSD-src-5219f99e6a6b2825f119d9181112455eacffa110.tar.gz |
Clean up swapfile memory disk on shutdown
Make the md unit number configurable so that it can be predicted
PR: bin/168544
Submitted by: wblock (based on)
Approved by: kevlo
-rw-r--r-- | etc/defaults/rc.conf | 1 | ||||
-rwxr-xr-x | etc/rc.d/addswap | 43 |
2 files changed, 40 insertions, 4 deletions
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index 3760fc0..687b092 100644 --- a/etc/defaults/rc.conf +++ b/etc/defaults/rc.conf @@ -33,6 +33,7 @@ always_force_depends="NO" # Set to check that indicated dependencies are # running during boot (can increase boot time). swapfile="NO" # Set to name of swapfile if aux swapfile desired. +swapfile_mdunit="99" # Swapfile md(4) unit number created by mdconfig(8). apm_enable="NO" # Set to YES to enable APM BIOS functions (or NO). apmd_enable="NO" # Run apmd to handle APM event from userland. apmd_flags="" # Flags to apmd (if enabled). diff --git a/etc/rc.d/addswap b/etc/rc.d/addswap index 8dec456..a6ff187 100755 --- a/etc/rc.d/addswap +++ b/etc/rc.d/addswap @@ -8,13 +8,13 @@ # PROVIDE: addswap # REQUIRE: FILESYSTEMS kld # BEFORE: netif -# KEYWORD: nojail +# KEYWORD: nojail shutdown . /etc/rc.subr name="addswap" start_cmd="addswap_start" -stop_cmd=":" +stop_cmd="addswap_stop" addswap_start() { @@ -23,8 +23,43 @@ addswap_start() ;; *) if [ -w "${swapfile}" ]; then - echo "Adding ${swapfile} as additional swap" - mdev=`mdconfig -a -t vnode -f ${swapfile}` && swapon /dev/${mdev} + check_startmsgs && echo "Adding ${swapfile} as additional swap" + + if [ -n "${swapfile_mdunit}" ]; then + mdev="/dev/md${swapfile_mdunit#md}" + mdconfig -a -t vnode -f "${swapfile}" -u ${swapfile_mdunit} + else + mdev="/dev/`mdconfig -a -t vnode -f "${swapfile}"`" + fi + + if [ $? -eq 0 ]; then + swapon ${mdev} + else + echo "error creating swapfile device" + fi + fi + ;; + esac +} + +addswap_stop() +{ + case ${swapfile} in + [Nn][Oo] | '') + ;; + *) + if [ -n "${swapfile_mdunit}" ]; then + mdev="/dev/md${swapfile_mdunit#md}" + else + mdev="/dev/`mdconfig -lv | grep "${swapfile}" | cut -f1`" + swapfile_mdunit=${mdev#md} + fi + if [ -n "${swapfile_mdunit}" ]; then + swapctl -l | grep -q ${mdev} + if [ $? -eq 0 ]; then + echo "Dismounting swapfile ${swapfile}" + swapoff ${mdev} && mdconfig -d -u ${swapfile_mdunit} + fi fi ;; esac |