Re: Unable to set log priority for all direct mounts

Deke Clinger <[email protected]> Thu, 21 May 2026 17:41:10 -0700 (PDT)
Newsgroups org.kernel.vger.autofs
Message-ID <[email protected]>
Hi Ian,

Thanks for fixing this, it was my request originally. It is super useful to be able to change the log level for the whole direct map with one command when that map is tens of thousands of entries long.

Regards,

-Deke

On Mon, 18 May 2026, Ian Kent wrote:

> WARNING: This email originated from outside of Qualcomm. Please be wary of any
> links or attachments, and do not enable macros.
> 
> 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 *);
> 
> 
> 
>