summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/fs/autofs/autofs.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/fs/autofs/autofs.c b/sys/fs/autofs/autofs.c
index d3ea03d..d5a6892 100644
--- a/sys/fs/autofs/autofs.c
+++ b/sys/fs/autofs/autofs.c
@@ -595,6 +595,14 @@ autofs_open(struct cdev *dev, int flags, int fmt, struct thread *td)
{
sx_xlock(&sc->sc_lock);
+ /*
+ * We must never block automountd(8) and its descendants, and we use
+ * session ID to determine that: we store session id of the process
+ * that opened the device, and then compare it with session ids
+ * of triggering processes. This means running a second automountd(8)
+ * instance would break the previous one. The check below prevents
+ * it from happening.
+ */
if (sc->sc_dev_opened) {
sx_xunlock(&sc->sc_lock);
return (EBUSY);
OpenPOWER on IntegriCloud