Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 Jan 2024 13:48:11 -0800
From:      Cy Schubert <Cy.Schubert@cschubert.com>
To:        Rick Macklem <rick.macklem@gmail.com>
Cc:        Mike Karels <mike@karels.net>, Olivier Certner <olce@freebsd.org>, Warner Losh <imp@bsdimp.com>, freebsd-current@freebsd.org
Subject:   Re: noatime on ufs2
Message-ID:  <20240130214811.622C91B0@slippy.cwsent.com>
In-Reply-To: <CAM5tNy5j3m-vqxTTFK82VzOecLwKCaRTFO2Xxofgj4WCXywvjg@mail.gmail.com>
References:  <ZZqmmM-6f606bLJx@int21h> <3896441.telDhacX5M@ravel>  <CANCZdfppuaPgM40FpF6rCdTgwjVqOXivJpinNy=69KY7yncu7Q@mail.gmail.com>  <1732771.R3xgXyqmLP@ravel> <BC3B5A6F-69BB-4F1E-8C51-56C2693A8435@karels.net> <CAM5tNy5j3m-vqxTTFK82VzOecLwKCaRTFO2Xxofgj4WCXywvjg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
In message <CAM5tNy5j3m-vqxTTFK82VzOecLwKCaRTFO2Xxofgj4WCXywvjg@mail.gmail.c
om>
, Rick Macklem writes:
> On Tue, Jan 30, 2024 at 10:49=E2=80=AFAM Mike Karels <mike@karels.net> wrot=
> e:
> >
> > On 30 Jan 2024, at 3:00, Olivier Certner wrote:
> >
> > > Hi Warner,
> > >
> > >> I strongly oppose this notion to control this from loader.conf. Root i=
> s
> > >> mounted read-only, so it doesn't matter. That's why I liked Mike's
> > >> suggestion: root isn't special.
> > >
> > > Then in fact there is nothing to oppose.  You've just said yourself tha=
> t root is mounted first read-only.  As Mike already said, it is remounted r=
> /w in userland later in the boot process.  I just re-checked the code, beca=
> use I only had a vague recollection of all this, and can confirm.
> > >
> > > I mentioned the need to modify '/etc/loader.conf' as a possible consequ=
> ence, not as a goal.  Given what we have established, there is no need to c=
> hange it at all.
> > >
> > > The root FS is thus in no way more special in the sysctl proposal than =
> with Mike's (assuming it doesn't rely on sysctl), this is an independent pr=
> operty due to the boot process design.
> >
> > With the possible exception that the sysctl mechanism might then have to
> > apply to mount update.
> >
> > >>>> It also seems undesirable to add a sysctl to control a value that th=
> e
> > >>>> kernel doesn't use.
> > >>>
> > >>> The kernel has to use it to guarantee some uniform behavior irrespect=
> ive
> > >>> of the mount being performed through mount(8) or by a direct call to
> > >>> nmount(2).  I think this consistency is important.  Perhaps all
> > >>> auto-mounters and mount helpers always run mount(8) and never deal wi=
> th
> > >>> nmount(2), I would have to check (I seem to remember that, a long tim=
> e ago,
> > >>> when nmount(2) was introduced as an enhancement over mount(2), the st=
> ance
> > >>> was that applications should use mount(8) and not nmount(2) directly)=
> .
> > >>> Even if there were no obvious callers of nmount(2), I would be a bit
> > >>> uncomfortable with this discrepancy in behavior.
> >
> > Based on a quick git grep, it looks like most of the things in base use
> > nmount(2), not mount(2).  If they use mount(8), then it's not a problem
> > because mount(8) would be the first thing to get things right.  If, by
> > mount helpers, you mean things like mount_nfs and mount_mfs, then mount(8=
> )
> > uses them rather than the reverse.  I also don't remember any admonition
> > not to use nmount(2).  mount(8) has a limited set of file system types th=
> at
> > it handles directly.
> >
> > >> I disagree. I think Mike's suggestion was better and dealt with POLA a=
> nd
> > >> POLA breaking in a sane way. If the default is applied universally in =
> user
> > >> space, then we need not change the kernel at all.
> > >
> > > I think applying the changes to userland only is really a bad idea.  I'=
> ve already explained why, but going to do it again in case you missed that.=
>   If you have counter-arguments, fine, but I would like to see them.
> > >
> > > Changing userland only causes a discrepancy between mount(8) and nmount=
> (2).  Even if the project would take a stance that nmount(2) is not a publi=
> c API and mount(8) must always be used, the system call will still be there=
>   And if it's not supposed to be used, what's the problem with changing it=
>  as well?
> >
> > I don't think that stance has been taken; nmount(2) is certainly document=
> ed.
> > But I think that user level changes are required in both cases.  First, f=
> or
> > the kernel to do the right thing, it needs to know if either noatime or a=
> time
> > has been specified explicitly, or if the default should apply.  Otherwise=
> , the
> > kernel can only force noatime to be used in all cases or none, which I be=
> lieve
> > is a non-starter.  Second, for anything using mount(2), the flags include=
>  only
> > MNT_NOATIME, which can only include two options, not the required three. =
>  It
> > would be possible to add another flag meaning to actually use the state o=
> f the
> > MNT_NOATIME flag, but that would require user-level changes.  Third, if I
> > understand correctly, mount(8) parses the options and condenses the stand=
> ard
> > boolean options like {,no}atime into a bit, preserving the last option
> > specified.  E.g. if the fstab lists noatime for a file system, and "mount=
>  -o
> > atime ..." is given on the command line, noatime will not be included in
> > the kernel options.  The kernel can't tell why, whether nothing was speci=
> fied
> > or the option was explicit.  In theory, three states can be encoded using
> > nmount; options could include "atime", "noatime", or neither.  But that's
> > not what the current user level does, so changes are required.  Given tha=
> t,
> > it makes the most sense to have mount(8) and others to incorporate the
> > default into their operation, and just give the kernel the answer.  btw,
> > see mntopts(3) for where this code would go.
> These days most mount options are parsed in the kernel via vfs_getopts(),
> but not "atime". It appears that "(no)atime" sets/clears MNT_NOATIME in
> userspace via the getmntopts() function that lives in
> /usr/src/sbin/mount/getmntopts.c.
>
> I think this is mostly cruft left over from the mount(2)->nmount(2) convers=
> ion,
> for generic options that cover all file systems.
>
> Personally, I like the idea of the addition of a defaults line in
> fstab(5), but am
> not sure what needs to be done for things like auto mounting?

automountd will require addition of of options to existing configuration. 
am-utils users can add a default line. Or an addition of a "default" 
specification, which would make it incompatible with Linux and Solaris. 
Currently our autofs is 100% compatible (minus the /net bug) with both.

>
> I'll admit I do not see what the default value of "(no)atime" is, so long a=
> s it
> can be overridden on a per mount basis. A change to what the installer sets=
> ,
> seems fine to me.
>
> rick
>

[...]


-- 
Cheers,
Cy Schubert <Cy.Schubert@cschubert.com>
FreeBSD UNIX:  <cy@FreeBSD.org>   Web:  https://FreeBSD.org
NTP:           <cy@nwtime.org>    Web:  https://nwtime.org

			e^(i*pi)+1=0





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20240130214811.622C91B0>