aboutsummaryrefslogtreecommitdiff
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)
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 4fb48ae9..d85b1c1b 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 2bb14504..454f9f92 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
*" $$ "*)