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 *);