Re: Unable to set log priority for all direct mounts

Ian Kent <[email protected]> Mon, 18 May 2026 17:01:50 +0800
Newsgroups org.kernel.vger.autofs
Message-ID <[email protected]>
On 15/5/26 04:01, Goldwyn Rodrigues wrote:
> Hello,
>
> Since the work to have a single FIFO file for setting log priority
> (16ea4156 ("autofs-5.1.8 - switch to application wide command pipe"), to
> be more precise 16ea4156 (autofs-5.1.8 - switch to application wide
> command pipe), automount has lost the ability to set the log priority of
> all direct mounts using the path "/-".
>
>
> # sudo automount -l info /-
> Could not find device id for mount /-
>
> This is because automount attempts to mount and get verifies the real
> path which is non-existent in case of direct mounts "/-".
>
> In the automount program, the log priority is set pretty early and much
> before the master map is setup. So we cannot check on the autofs dev
> either.
>
> What would be the best way to solve this? Should we just document it
> as a feature loss?
>

Haven't actually tested this but it should work to fix the log priority

for /-.

Could you give it a try please.


autofs-5.1.9 - fix handling of direct mount path in command handler

From: Ian Kent <[email protected]>

Commit 16ea4156471e ("autofs-5.1.8 - switch to application wide command
pipe") broke the ability to set the log priority from the command line
for all direct mounts.

As Goldwyn Rodrigues points out the autofs_point structure for direct
mounts doesn't have a real mount associated with it so it needs special
handling which was ommitted in commit 16ea4156471e.

Fixes: 16ea4156471e ("autofs-5.1.8 - switch to application wide command pipe")
Reported-By: Goldwyn Rodrigues <[email protected]>
Signed-off-by: Ian Kent <[email protected]>
---
  CHANGELOG          |    1 +
  daemon/automount.c |   17 +++++++++++++++--
  daemon/master.c    |   11 +++++++++++
  include/master.h   |    3 ++-
  4 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index d6d594e9e..0fc529f32 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -89,6 +89,7 @@
  - do_reconnect() expiry check of dclist BEFORE lookup using it.
  - fix mailing list subscription address.
  - fix table_lookup_ino() fd reference.
+- fix handling of direct mount path in command handler.
  
  02/11/2023 autofs-5.1.9
  - fix kernel mount status notification.
diff --git a/daemon/automount.c b/daemon/automount.c
index 517764119..a01d176ae 100644
--- a/daemon/automount.c
+++ b/daemon/automount.c
@@ -1487,7 +1487,13 @@ static void handle_cmd_pipe_fifo_message(int fd)
  		return;
  	}
  
-	ap = master_find_mapent_by_devid(devid);
+	/* There's no "real" devid for the top level direct mount
+	 * container so we use -1.
+	 */
+	if (devid == -1)
+		ap = master_find_mapent_by_path("/-");
+	else
+		ap = master_find_mapent_by_devid(devid);
  	if (!ap) {
  		error(LOGOPT_ANY, "can't locate autofs_point for device id %ld.", devid);
  		return;
@@ -1548,7 +1554,14 @@ static int set_log_priority(const char *path, int priority)
  	if (!ops) {
  		fprintf(stderr, "Could not get ioctl ops\n");
  		return -1;
-	} else {
+	}
+
+	/* There's no "real" devid for the top level direct mount
+	 * container so we use -1.
+	 */
+	if (!strcmp(path, "/-"))
+		devid = -1;
+	else {
  		ret = ops->mount_device(LOGOPT_ANY, path, 0, &devid);
  		if (ret == -1 || ret == 0) {
  			fprintf(stderr,
diff --git a/daemon/master.c b/daemon/master.c
index d85dd8975..8b7450e73 100644
--- a/daemon/master.c
+++ b/daemon/master.c
@@ -711,6 +711,17 @@ struct master_mapent *master_find_mapent(const char *path)
  	return NULL;
  }
  
+struct autofs_point *master_find_mapent_by_path(const char *path)
+{
+	struct autofs_point *ap = NULL;
+	struct master_mapent *entry;
+
+	entry = master_find_mapent(path);
+	if (entry)
+		ap = entry->ap;
+	return ap;
+}
+
  struct autofs_point *master_find_mapent_by_devid(dev_t devid)
  {
  	struct master *master = master_list;
diff --git a/include/master.h b/include/master.h
index 71610611f..3ca7ad8d6 100644
--- a/include/master.h
+++ b/include/master.h
@@ -105,7 +105,8 @@ void master_source_readlock(struct master_mapent *);
  void master_source_unlock(struct master_mapent *);
  void master_source_lock_cleanup(void *);
  struct master_mapent *master_find_mapent(const char *);
-struct autofs_point *master_find_mapent_by_devid(dev_t devid);
+struct autofs_point *master_find_mapent_by_path(const char *);
+struct autofs_point *master_find_mapent_by_devid(dev_t);
  struct master_mapent *master_new_mapent(const char *, time_t);
  void master_add_mapent(struct master_mapent *);
  void master_remove_mapent(struct master_mapent *);