From: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
To: Miklos Szeredi <miklos-sUDqSbJrdHQHWmgEVkV9KA@public.gmane.org>
Cc: "Myklebust\,
Trond" <Trond.Myklebust-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org>,
Bernd Schubert
<bernd.schubert-mPn0NPGs4xGatNDF+KUbs4QuADTiUCJX@public.gmane.org>,
Malahal Naineni <malahal-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>,
"linux-nfs\@vger.kernel.org"
<linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-fsdevel\@vger.kernel.org"
<linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-kernel\@vger.kernel.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"pstaubach\@exagrid.com"
<pstaubach-83r9SdEf25FBDgjK7y7TUQ@public.gmane.org>,
"viro\@ZenIV.linux.org.uk"
<viro-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>,
"hch\@infradead.org"
<hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
"michael.brantley\@deshaw.com"
<michael.brantley-Iq/kdjr4a97QT0dZR+AlfA@public.gmane.org>,
"sven.breuner\@itwm.fraunhofer.de"
<sven.breuner-mPn0NPGs4xGatNDF+KUbs4QuADTiUCJX@public.gmane.org>
Subject: Re: [PATCH RFC] vfs: make fstatat retry on ESTALE errors from getattr call
Date: Tue, 17 Apr 2012 10:22:58 -0400 [thread overview]
Message-ID: <20120417102258.49eb0071@corrin.poochiereds.net> (raw)
In-Reply-To: <87obqqo3qd.fsf-d8RdFUjzFsbxNFs70CDYszOMxtEWgIxa@public.gmane.org>
On Tue, 17 Apr 2012 16:03:06 +0200
Miklos Szeredi <miklos-sUDqSbJrdHQHWmgEVkV9KA@public.gmane.org> wrote:
> Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> writes:
>
> >> The retry is needed when when we discover during ->getattr() that the
> >> cached lookup returned a stale file handle.
> >>
> >> If the lookup wasn't cached or if there was no lookup at all
> >> (stat(".") and friends) then retrying will not gain anything.
> >>
> >
> > That's not necessarily the case, at least not with NFS. It's easily
> > possible for you to do a full-fledged lookup over the wire, and then
> > for that inode to be removed prior to issuing a call against the FH that
> > you got back.
> >
> >> And that also means that retrying multiple times is pointless, since
> >> after the first retry we are sure to have up-to-date attributes.
> >>
> >
> > Again, it's not pointless. It's possible (though somewhat pathological)
> > for you to hit the race above more than once in the same operation.
> > Granted, it's an unlikely race but it is possible.
>
> ->lookup() should (and does AFAICS) leave a fully initialized inode with
> up-to-date atributes in there and at that moment there's not a lot of
> sense in fetching the attributes from the server *again*.
>
> How that lookup is implemented is another question, I can see in
> nfs3_proc_lookup() that it may or may not be atomic, and retrying (and
> looping) there might make sense. But it doesn't retry and doesn't loop,
> so the fact is, it will either return ESTALE (and the path lookup will
> retry once with LOOKUP_REVAL) or the inode *will* be up-to-date.
>
> So I think I'm still right that it's pointless to do retry after a
> non-cached lookup.
>
Ok, I'll grant that for stat() type calls, but I've just been focusing
on that as an example here. We'll need to do something similar for all
path based syscalls. What about things that require more than one round
trip -- e.g. chmod()?
> >> Unfortunately it's impossible for the filesystem to know whether a
> >> ->getattr (or other inode operation) was perfromed after a cached or a
> >> non-cached lookup.
> >>
> >> I'm not sure what the right interface for this would be. One would be
> >> to just pass the "cached-or-not" information as a flag. That works for
> >> getattr() but not for other operations.
> >>
> >> Another is to introduce atomic lookup+foo variants of these operations
> >> just like for open. E.g. the lookup+getattr is called if the cached
> >> lookup fails or if the cached lookup succeeds and the plain ->getattr
> >> call returns ESTALE.
> >>
> >
> > To do that would require protocol support that we simply don't have. We
> > don't have a way to (for instance) say via NFS "give me the attributes
> > for this filename". Well, at least not for NFSv3...
> >
> > With v4 you could theoretically construct a compound that does that,
> > but you'd have to assume that the server won't release the reference to
> > the inode midway through the compound. That's a reasonably safe
> > assumption.
> >
> > While it's nice to consider new atomic ops like this, it's not really
> > possible with earlier versions of NFS.
>
> It's just an interface question: where you put the retry logic for those
> non-atomic protocols. I think it's cleaner if the retry logic is in the
> filesystem and not in the VFS. Then NFS can do whatever it wants
> without having to impose policy in the generic filesystem layer.
>
So essentially you want to push all of the LOOKUP handling down into
the filesystems such that all ops are atomic_* or have an atomic_*
variant. That sounds like a very heavy-handed way to solve this.
--
Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2012-04-17 14:22 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-13 11:25 [PATCH RFC] vfs: make fstatat retry on ESTALE errors from getattr call Jeff Layton
[not found] ` <1334316311-22331-1-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-04-13 12:02 ` Jim Rees
[not found] ` <20120413120232.GA27179-63aXycvo3TyHXe+LvDLADg@public.gmane.org>
2012-04-13 12:09 ` Jeff Layton
2012-04-18 11:52 ` [PATCH RFC v3] vfs: make fstatat retry once " Jeff Layton
2012-04-20 14:40 ` Jeff Layton
[not found] ` <20120420104055.511e15bc-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2012-04-20 20:18 ` Steve Dickson
[not found] ` <4F91C49D.8070908-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2012-04-20 20:37 ` Malahal Naineni
2012-04-20 21:13 ` Jeff Layton
2012-04-22 5:40 ` Miklos Szeredi
[not found] ` <CAJfpegt40cgMJQQo3JuNaaS1w957Y2a_NxVoyvx3bmTMj1TGOA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-04-23 12:00 ` Jeff Layton
[not found] ` <20120423080012.7c23ef24-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2012-04-23 13:00 ` J. Bruce Fields
[not found] ` <20120423130009.GA13681-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
2012-04-23 13:12 ` Jeff Layton
[not found] ` <20120423091255.00f926c4-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2012-04-23 13:34 ` J. Bruce Fields
[not found] ` <20120423133412.GB13681-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
2012-04-23 13:50 ` Jeff Layton
2012-04-23 13:54 ` J. Bruce Fields
2012-04-23 14:51 ` Miklos Szeredi
[not found] ` <87hawasdrb.fsf-d8RdFUjzFsbxNFs70CDYszOMxtEWgIxa@public.gmane.org>
2012-04-23 15:02 ` Chuck Lever
2012-04-23 15:23 ` Miklos Szeredi
2012-04-23 17:45 ` Peter Staubach
2012-04-23 15:16 ` Jeff Layton
2012-04-23 15:28 ` Miklos Szeredi
2012-04-23 18:59 ` Jeff Layton
2012-04-20 21:13 ` Jeff Layton
[not found] ` <20120420171300.326d6e36-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-04-23 14:55 ` Steve Dickson
[not found] ` <4F956D5C.5050801-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2012-04-23 15:32 ` Jeff Layton
[not found] ` <20120423113216.01992555-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2012-04-23 18:06 ` Steve Dickson
2012-04-23 18:33 ` Jeff Layton
[not found] ` <4F959A36.2080402-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2012-04-23 20:38 ` Peter Staubach
2012-04-24 14:50 ` Jeff Layton
[not found] ` <20120424105049.5ed96b40-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2012-04-24 15:54 ` Miklos Szeredi
2012-04-24 16:34 ` Jeff Layton
[not found] ` <20120424123413.17625d5d-9yPaYZwiELC+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2012-04-25 9:41 ` Miklos Szeredi
[not found] ` <87bomgkv1b.fsf-d8RdFUjzFsbxNFs70CDYszOMxtEWgIxa@public.gmane.org>
2012-04-25 12:04 ` Jeff Layton
2012-04-23 17:43 ` Peter Staubach
2012-04-23 19:06 ` Malahal Naineni
2012-04-22 4:16 ` Ric Wheeler
2012-04-23 11:20 ` Jeff Layton
[not found] ` <20120413150518.GA1987@us.ibm.com>
2012-04-13 15:42 ` [PATCH RFC] vfs: make fstatat retry " Jeff Layton
2012-04-13 16:07 ` Steve Dickson
[not found] ` <4F884F32.7010402-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2012-04-13 17:10 ` Jeff Layton
2012-04-13 17:34 ` Peter Staubach
[not found] ` <2F609A9B-B44B-4CEA-BF35-D6BEDA729363-83r9SdEf25FBDgjK7y7TUQ@public.gmane.org>
2012-04-13 23:00 ` Jeff Layton
2012-04-14 0:57 ` Trond Myklebust
2012-04-15 19:03 ` Bernd Schubert
[not found] ` <4F8B1B7B.3040304-mPn0NPGs4xGatNDF+KUbs4QuADTiUCJX@public.gmane.org>
2012-04-15 19:27 ` J. Bruce Fields
2012-04-16 14:23 ` Bernd Schubert
2012-04-15 19:57 ` Chuck Lever
2012-04-16 11:23 ` Jeff Layton
2012-04-17 11:53 ` Steve Dickson
2012-04-16 11:36 ` Jeff Layton
[not found] ` <20120416073655.7cdb90cf-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-04-16 12:54 ` Peter Staubach
2012-04-16 16:04 ` Jeff Layton
2012-04-16 14:44 ` Bernd Schubert
[not found] ` <4F8C3036.2030702-mPn0NPGs4xGatNDF+KUbs4QuADTiUCJX@public.gmane.org>
2012-04-16 17:46 ` Jeff Layton
2012-04-16 19:33 ` Myklebust, Trond
2012-04-16 19:43 ` Jeff Layton
2012-04-16 20:25 ` Myklebust, Trond
2012-04-16 23:05 ` Jeff Layton
[not found] ` <20120416190548.2463d1d0-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-04-17 11:46 ` Steve Dickson
[not found] ` <4F8D580B.7060104-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2012-04-17 13:36 ` Jeff Layton
[not found] ` <20120417093643.7f172057-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-04-17 14:14 ` Steve Dickson
2012-04-17 14:27 ` Miklos Szeredi
2012-04-17 15:02 ` Jeff Layton
[not found] ` <20120417110219.0db9bdee-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-04-17 15:50 ` Miklos Szeredi
[not found] ` <87aa2anys1.fsf-d8RdFUjzFsbxNFs70CDYszOMxtEWgIxa@public.gmane.org>
2012-04-17 16:03 ` Jeff Layton
2012-04-17 15:59 ` Steve Dickson
2012-04-17 13:12 ` Miklos Szeredi
2012-04-17 13:32 ` Jeff Layton
2012-04-17 14:03 ` Miklos Szeredi
[not found] ` <87obqqo3qd.fsf-d8RdFUjzFsbxNFs70CDYszOMxtEWgIxa@public.gmane.org>
2012-04-17 14:22 ` Jeff Layton [this message]
[not found] ` <20120417093222.2ff5e1bd-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-04-17 14:04 ` Myklebust, Trond
2012-04-17 14:20 ` Jeff Layton
[not found] ` <20120417102035.2236e553-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-04-17 15:45 ` J. Bruce Fields
[not found] ` <20120417154549.GA27426-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
2012-04-17 16:02 ` Miklos Szeredi
2012-04-17 13:39 ` Peter Staubach
2012-04-17 14:08 ` Myklebust, Trond
[not found] ` <1334671736.2963.30.camel-SyLVLa/KEI9HwK5hSS5vWJi5GlFTYi68DQmRywkZCB4@public.gmane.org>
2012-04-17 14:48 ` Peter Staubach
[not found] ` <FA8A9A935BFD3A4D8F0CDA1C4F611BCC063CF8E132-0qHjP65cd0bRCIvD65MY1w@public.gmane.org>
2012-04-18 15:16 ` Jeff Layton
[not found] ` <20120416134642.1754cd3e-4QP7MXygkU+dMjc06nkz3ljfA9RmPOcC@public.gmane.org>
2012-04-16 19:43 ` Scott Lovenberg
2012-04-16 16:55 ` [PATCH RFC v2] " Jeff Layton
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=20120417102258.49eb0071@corrin.poochiereds.net \
--to=jlayton-h+wxahxf7alqt0dzr+alfa@public.gmane.org \
--cc=Trond.Myklebust-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org \
--cc=bernd.schubert-mPn0NPGs4xGatNDF+KUbs4QuADTiUCJX@public.gmane.org \
--cc=hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
--cc=linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=malahal-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org \
--cc=michael.brantley-Iq/kdjr4a97QT0dZR+AlfA@public.gmane.org \
--cc=miklos-sUDqSbJrdHQHWmgEVkV9KA@public.gmane.org \
--cc=pstaubach-83r9SdEf25FBDgjK7y7TUQ@public.gmane.org \
--cc=sven.breuner-mPn0NPGs4xGatNDF+KUbs4QuADTiUCJX@public.gmane.org \
--cc=viro-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org \
/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;
as well as URLs for NNTP newsgroup(s).