summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Hubbs <w.d.hubbs@gmail.com>2013-02-16 12:53:31 -0600
committerWilliam Hubbs <w.d.hubbs@gmail.com>2013-03-12 12:57:44 -0500
commit67944412247173c65b14e7eaeb20b961241e1bd5 (patch)
tree41695802cbe066136b9c64ad2f8c39d405e208b4
parent274d6eee662c7f4fe0233da08247c9e40af5c382 (diff)
downloadopenrc-67944412247173c65b14e7eaeb20b961241e1bd5.tar.gz
openrc-67944412247173c65b14e7eaeb20b961241e1bd5.tar.bz2
openrc-67944412247173c65b14e7eaeb20b961241e1bd5.tar.xz
Make fuser command time out
This avoids situations in which fuser hangs because of open files on remote file systems when the remote system goes down. I have also passed this bug on to the maintainers of psmisc since it should really be fixed in fuser. This is based on a patch submitted by evermind@tuxfamily.org Reported-by: evermind@tuxfamily.org X-Gentoo-Bug: 455458 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=455458
-rw-r--r--etc/rc.conf.Linux4
-rw-r--r--sh/rc-mount.sh3
2 files changed, 6 insertions, 1 deletions
diff --git a/etc/rc.conf.Linux b/etc/rc.conf.Linux
index 4fb48ae..d85b1c1 100644
--- a/etc/rc.conf.Linux
+++ b/etc/rc.conf.Linux
@@ -20,6 +20,10 @@
# consolefont, numlock, etc ...)
rc_tty_number=12
+# This is how long fuser should wait for a remote server to respond. The
+# default is 60 seconds, but it can be adjusted here.
+#rc_fuser_timeout=60
+
##############################################################################
# CGROUPS RESOURCE MANAGEMENT
diff --git a/sh/rc-mount.sh b/sh/rc-mount.sh
index 2bb1450..454f9f9 100644
--- a/sh/rc-mount.sh
+++ b/sh/rc-mount.sh
@@ -41,7 +41,8 @@ do_unmount()
retry=4 # Effectively TERM, sleep 1, TERM, sleep 1, KILL, sleep 1
while ! LC_ALL=C $cmd "$mnt" 2>/dev/null; do
if type fuser >/dev/null 2>&1; then
- pids="$(fuser $f_opts "$mnt" 2>/dev/null)"
+ pids="$(timeout -k 10 -s KILL "${rc_fuser_timeout:-60}" \
+ fuser $f_opts "$mnt" 2>/dev/null)"
fi
case " $pids " in
*" $$ "*)