From: Trond Myklebust <trondmy@hammerspace.com>
To: "david@fromorbit.com" <david@fromorbit.com>,
"neilb@suse.de" <neilb@suse.de>
Cc: "zohar@linux.ibm.com" <zohar@linux.ibm.com>,
"linux-ext4@vger.kernel.org" <linux-ext4@vger.kernel.org>,
"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
"linux-integrity@vger.kernel.org"
<linux-integrity@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-xfs@vger.kernel.org" <linux-xfs@vger.kernel.org>,
"jlayton@kernel.org" <jlayton@kernel.org>,
"linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>
Subject: Re: [PATCH] iversion: update comments with info about atime updates
Date: Wed, 24 Aug 2022 00:11:17 +0000 [thread overview]
Message-ID: <1aeecde587672ed4e9932e7cf4c62291308f37a6.camel@hammerspace.com> (raw)
In-Reply-To: <166129813890.23264.7939069509747685028@noble.neil.brown.name>
On Wed, 2022-08-24 at 09:42 +1000, NeilBrown wrote:
> On Wed, 24 Aug 2022, Dave Chinner wrote:
> > On Wed, Aug 24, 2022 at 08:24:47AM +1000, NeilBrown wrote:
> > > On Tue, 23 Aug 2022, Jeff Layton wrote:
> > > > On Tue, 2022-08-23 at 21:38 +1000, NeilBrown wrote:
> > > > > On Tue, 23 Aug 2022, Jeff Layton wrote:
> > > > > > So, we can refer to that and simply say:
> > > > > >
> > > > > > "If the function updates the mtime or ctime on the inode,
> > > > > > then the
> > > > > > i_version should be incremented. If only the atime is being
> > > > > > updated,
> > > > > > then the i_version should not be incremented. The exception
> > > > > > to this rule
> > > > > > is explicit atime updates via utimes() or similar
> > > > > > mechanism, which
> > > > > > should result in the i_version being incremented."
> > > > >
> > > > > Is that exception needed? utimes() updates ctime.
> > > > >
> > > > > https://man7.org/linux/man-pages/man2/utimes.2.html
> > > > >
> > > > > doesn't say that, but
> > > > >
> > > > > https://pubs.opengroup.org/onlinepubs/007904875/functions/utimes.html
> > > > >
> > > > > does, as does the code.
> > > > >
> > > >
> > > > Oh, good point! I think we can leave that out. Even better!
> > >
> > > Further, implicit mtime updates (file_update_time()) also update
> > > ctime.
> > > So all you need is
> > > If the function updates the ctime, then i_version should be
> > > incremented.
> > >
> > > and I have to ask - why not just use the ctime? Why have another
> > > number
> > > that is parallel?
> > >
> > > Timestamps are updated at HZ (ktime_get_course) which is at most
> > > every
> > > millisecond.
> >
> > Kernel time, and therefore timestamps, can go backwards.
>
> Yes, and when that happens you get to keep both halves...
>
> For NFSv4 I really don't think that matters. If it happened every
> day,
> that might be a problem. Even if it happens as a consequence of
> normal
> operations it might be a problem. But it can only happen if
> something
> goes wrong.
>
> Mostly, NFSv4 only needs to changeid to change. If the kernel time
> goes
> backwards it is possible that a changeid will repeat, though
> unlikely.
> It is even possible that a client will see the first and second
> instances of that repeat, and assume there is no change in between -
> but
> that is astronomically unlikely. "touch"ing the file or remounting
> will
> fix that.
>
> When a write delegation is in force (which Linux doesn't currently
> offer
> and no-one seems to care about, but maybe one day), the client is
> allowed to update the changeid, and when the delegation is returned,
> the
> server is supposed to ensure the new changeid is at least the last
> one
> assigned by the client. This is the only reason that it is defined
> as
> being monotonic (rather than just "non-repeating") - so the client
> and
> server can change it in the same way.
>
Sort of... Monotonicity of the change id is not a requirement, even for
that case.
The exact NFSv4 requirement is that if the server uses a callback to
ask the client for the file attribute information, then the client is
supposed to bump the server-supplied change id value by 1 unit if it is
caching writes. The intention is simply to ensure that there is a
notification mechanism to allow the server to know that writes are
being cached (Note: I've no idea why we didn't just add a separate flag
for that in the callback reply).
> So while kernel time going backwards is theoretically less than
> ideal,
> it is not practically a problem.
>
I agree with that. As long as this results in few collisions, so that
value uniqueness is guaranteed then applications (NFS or other) will
have a way to determine if the filesystem object has changed since they
last looked at it.
IOW: I'm not saying this is the perfect way to implement an
application-visible change attribute, but it would be a massive
improvement over ctime, and might be a practical way to go about it.
--
Trond Myklebust
Linux NFS client maintainer, Hammerspace
trond.myklebust@hammerspace.com
next prev parent reply other threads:[~2022-08-24 0:11 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-22 13:33 [PATCH] iversion: update comments with info about atime updates Jeff Layton
2022-08-22 15:40 ` Mimi Zohar
2022-08-22 16:22 ` Jeff Layton
2022-08-22 17:39 ` Mimi Zohar
2022-08-22 18:22 ` Jeff Layton
2022-08-22 23:32 ` Dave Chinner
2022-08-23 11:21 ` Jeff Layton
2022-08-23 11:38 ` NeilBrown
2022-08-23 11:51 ` Jeff Layton
2022-08-23 22:24 ` NeilBrown
2022-08-23 23:28 ` Dave Chinner
2022-08-23 23:42 ` NeilBrown
2022-08-24 0:11 ` Trond Myklebust [this message]
2022-08-24 12:53 ` Jeff Layton
2022-08-25 0:17 ` NeilBrown
2022-08-23 23:25 ` Dave Chinner
2022-08-24 12:45 ` Jeff Layton
2022-08-22 22:42 ` NeilBrown
2022-08-22 23:26 ` Trond Myklebust
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1aeecde587672ed4e9932e7cf4c62291308f37a6.camel@hammerspace.com \
--to=trondmy@hammerspace.com \
--cc=david@fromorbit.com \
--cc=jlayton@kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nfs@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=neilb@suse.de \
--cc=zohar@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.