public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
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



  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox