Re: Unable to set log priority for all direct mounts
Goldwyn Rodrigues <[email protected]> Mon, 18 May 2026 14:04:48 -0400
| Newsgroups | org.kernel.vger.autofs |
|---|---|
| Message-ID | <[email protected]> |
On 17:01 18/05, Ian Kent wrote:
> 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.
Yes, this fixes the log setting and works as expected. Thanks!
Reviewed-and-tested-by: Goldwyn Rodrigues <[email protected]>
>
>
> 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 *);
>
--
Goldwyn