NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: bin/15262



It has been a long time since I've been familiar with this code path
so don't block this on me.  Thanks for taking look at it.

Darrin

"Jacob Pipkin via gnats" <gnats-admin%NetBSD.org@localhost> writes:

> The following reply was made to PR bin/15262; it has been noted by GNATS.
>
> From: Jacob Pipkin <jacob.pipkin%icloud.com@localhost>
> To: gnats-bugs%netbsd.org@localhost
> Cc: 
> Subject: Re: bin/15262
> Date: Mon, 2 Mar 2026 17:18:56 -0600
>
>  This should just be a matter of skipping the FLG_UPDATE code path with
>  -u and just setting the "update" option directly. Here are my test
>  results:
>  --
>  # grep noatime /etc/fstab
>  NAME=70c33570-9733-3a44-b5b8-7351a1b600f0               /       ffs
>  rw,noatime               1 1
>  # mount | grep ' / '
>  /dev/dk1 on / type ffs (local)
>  # ./mount -u /
>  # mount | grep ' / '
>  /dev/dk1 on / type ffs (noatime, local)
>  # ./mount -o update /
>  # mount | grep ' / '
>  /dev/dk1 on / type ffs (noatime, local)
>  --
>  
>  Shiny. Here's the patch:
>  
>  Index: mount.c
>  ===================================================================
>  RCS file: /cvsroot/src/sbin/mount/mount.c,v
>  retrieving revision 1.108
>  diff -u -r1.108 mount.c
>  --- mount.c 1 Jul 2025 17:55:05 -0000   1.108
>  +++ mount.c 2 Mar 2026 23:00:01 -0000
>  @@ -150,7 +150,7 @@
>              vfstype = optarg;
>              break;
>          case 'u':
>  -           init_flags |= FLG_UPDATE;
>  +           catopt(&options, "update");
>              break;
>          case 'v':
>              verbose++;
>  @@ -229,60 +229,35 @@
>           */
>          canonical_path = realpath(*argv, canonical_path_buf);
>   
>  -       if (init_flags & FLG_UPDATE) {
>  -           /*
>  -            * Try looking up the canonical path first,
>  -            * then try exactly what the user entered.
>  -            */
>  -           if ((canonical_path == NULL ||
>  -               (mntbuf = getmntpt(canonical_path)) == NULL) &&
>  -               (mntbuf = getmntpt(*argv)) == NULL) {
>  -out:
>  -               errx(EXIT_FAILURE,
>  -                   "Unknown special file or file system `%s'",
>  -                   *argv);
>  -           }
>  -           mntfromname = mntbuf->f_mntfromname;
>  -           if ((fs = getfsfile(mntbuf->f_mntonname)) != NULL) {
>  -               if (strcmp(fs->fs_spec, "from_mount") != 0)
>  -                   mntfromname = fs->fs_spec;
>  -               /* ignore the fstab file options.  */
>  -               fs->fs_mntops = NULL;
>  -           }
>  -           mntonname  = mntbuf->f_mntonname;
>  -           fstypename = mntbuf->f_fstypename;
>  -           mountopts  = NULL;
>  -       } else {
>  -           /*
>  -            * Try looking up the canonical path first,
>  -            * then try exactly what the user entered.
>  -            */
>  -           if (canonical_path == NULL ||
>  -               ((fs = getfsfile(canonical_path)) == NULL &&
>  -                (fs = getfsspec(canonical_path)) == NULL))
>  -           {
>  -               if ((fs = getfsfile(*argv)) == NULL &&
>  -                   (fs = getfsspec(*argv)) == NULL) {
>  -                   goto out;
>  -               }
>  +       /*
>  +        * Try looking up the canonical path first,
>  +        * then try exactly what the user entered.
>  +        */
>  +       if (canonical_path == NULL ||
>  +           ((fs = getfsfile(canonical_path)) == NULL &&
>  +            (fs = getfsspec(canonical_path)) == NULL))
>  +       {
>  +           if ((fs = getfsfile(*argv)) == NULL &&
>  +               (fs = getfsspec(*argv)) == NULL) {
>  +               goto out;
>              }
>  -           if (BADTYPE(fs->fs_type))
>  -               errx(EXIT_FAILURE,
>  -                   "Unknown file system type for `%s'",
>  -                   *argv);
>  -           if (strcmp(fs->fs_spec, "from_mount") == 0) {
>  -               if ((canonical_path == NULL ||
>  -                   (mntbuf = getmntpt(canonical_path))
>  -                    == NULL) &&
>  -                   (mntbuf = getmntpt(*argv)) == NULL)
>  -                   goto out;
>  -               mntfromname = mntbuf->f_mntfromname;
>  -           } else
>  -               mntfromname = fs->fs_spec;
>  -           mntonname   = fs->fs_file;
>  -           fstypename  = fs->fs_vfstype;
>  -           mountopts   = fs->fs_mntops;
>          }
>  +       if (BADTYPE(fs->fs_type))
>  +           errx(EXIT_FAILURE,
>  +               "Unknown file system type for `%s'",
>  +               *argv);
>  +       if (strcmp(fs->fs_spec, "from_mount") == 0) {
>  +           if ((canonical_path == NULL ||
>  +               (mntbuf = getmntpt(canonical_path))
>  +                == NULL) &&
>  +               (mntbuf = getmntpt(*argv)) == NULL)
>  +               goto out;
>  +           mntfromname = mntbuf->f_mntfromname;
>  +       } else
>  +           mntfromname = fs->fs_spec;
>  +       mntonname   = fs->fs_file;
>  +       fstypename  = fs->fs_vfstype;
>  +       mountopts   = fs->fs_mntops;
>          mntfromname = getfsspecname(buf, sizeof(buf), mntfromname);
>          if (mntfromname == NULL)
>              err(EXIT_FAILURE, "%s", buf);
>  



Home | Main Index | Thread Index | Old Index