linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jan Harkes <jaharkes@cs.cmu.edu>
To: Trond Myklebust <trond.myklebust@fys.uio.no>
Cc: Jan Harkes <jaharkes@cs.cmu.edu>,
	linux-fsdevel@vger.kernel.org,
	Marcelo Tosatti <marcelo@conectiva.com.br>,
	alan@lxorguk.ukuu.org.uk, Alexander Viro <viro@math.psu.edu>
Subject: Re: [PATCH 2.4.19pre8][RFC] remove-NFS-close-to-open from VFS (was Re: [PATCHSET] 2.4.19-pre8-jp12)
Date: Thu, 17 Oct 2002 18:16:52 -0400	[thread overview]
Message-ID: <20021017221652.GA26692@ravel.coda.cs.cmu.edu> (raw)
In-Reply-To: <15791.12331.663212.692225@charged.uio.no>

On Thu, Oct 17, 2002 at 11:48:27PM +0200, Trond Myklebust wrote:
> >>>>> " " == Jan Harkes <jaharkes@cs.cmu.edu> writes:
>      > Originally, returning a error from d_revalidate in cached_lookup would
>      > force a subsequent real_lookup. After the patch, returning an error from
>      > d_revalidate propagates (in some cases) ESTALE back up to
>      > userspace.
> 
> Which is the whole point of the patch. If you are trying to read or
> modify a directory that is invalid, you need to be notified of that.

Yes, by failing in real_lookup, not randomly crapping out with ESTALE.

>      > Now either every filesystem will have to follow NFS's lead and
>                   ^^^^^
> The vast majority of filesystems are coping fine as they are.

Right, well only network filesystems could possibly be affected as
on-disk filesystems don't have any reason why the cached path would
suddenly become invalid, so let's look at network filesytems,

    - Coda definitely doesn't cope just fine.
    - smbfs, calls into revalidate_inode instead of retrying the lookup. Broken.
    - ncpfs, dentry->d_parent->d_inode. Hmm, probably breaks when revalidating
      the root of the mounted fs?
    - intermezzo, revalidates data and attributes of the object, same
      broken behaviour as smbfs.
    - NFS works!

Were there any other network filesystems in the kernel? So we've already
got 4 out of 5 broken.

Now let's look at out of kernel network and virtual filesystems,
    - OpenAFS, guess they're broken.
    - Arla, guess what :)

    - Supermount, well that is the guy who traced where the strange
      ESTALE problems came from, he worked on a patch that probably
      ended up working because I guess nothing can suddenly get renamed
      from underneath him.
    - CDFS, same deal.

>      > implement some form of real_lookup inside of the
>      > dentry_revalidate function which is not the prettiest
>      > solution. Or the VFS patch should be reverted/fixed to actually
>      > walk the tree for '.' and '..' lookups.
> 
> The whole problem was that we did *not* walk the tree for '.' and
> '.. 'lookups. Reverting the VFS patch simply results in us stupidly
> reusing current->fs->pwd, dentry->d_parent and friends without
> checking if it is safe to do so.

Sorry it should have been 'reverted, or fixed to actually revalidate all
entries on the cached tree leading up to '.' and '..'.

>      > btw. the patch also leaks dentries when a 'stale dentry'
>      > happens to have children because it doesn't properly check and
>      > handle the d_invalidate returncode.
> 
> Why? d_invalidate() doesn't dget() anything, and if you are doing
> 'open(".")' then it will return -EBUSY anyway. What are you going to
> do about it?

/**
 * d_invalidate - invalidate a dentry
 * @dentry: dentry to invalidate
 *
 * Try to invalidate the dentry if it turns out to be
 * possible. If there are other dentries that can be
 * reached through this one we can't delete it and we
 * return -EBUSY. On success we return 0.
 *
 * no dcache lock.
 */

It's the missing 'd_put' that is the problem. The code should probably
look like all other places where d_invalidate is called, i.e.

    if (!dentry->d_op->d_revalidate(dentry, flags)) {
-	d_invalidate(dentry);
+	if (!d_invalidate(dentry)) {
+	    dput(dentry);
+	    dentry = NULL;
+	}
	break;
    }

But why would I submit a patch to fix something that I believe is
fundamentally broken in the first place. I agree about the problem,
I just disagree about the fix that was applied.

And I actually thought it had already been reverted last May.

Jan


  reply	other threads:[~2002-10-17 22:16 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200205162142.AWF00051@netmail.netcologne.de>
     [not found] ` <E178TUb-0005Bh-00@the-village.bc.nu>
     [not found]   ` <20020517034357.GA18449@ravel.coda.cs.cmu.edu>
     [not found]     ` <Pine.LNX.4.44.0205161105520.5254-100000@alumno.inacap.cl>
2002-10-17 20:38       ` [PATCH 2.4.19pre8][RFC] remove-NFS-close-to-open from VFS (was Re: [PATCHSET] 2.4.19-pre8-jp12) Jan Harkes
2002-10-17 21:48         ` Trond Myklebust
2002-10-17 22:16           ` Jan Harkes [this message]
2002-10-17 23:57             ` Trond Myklebust
2002-10-18 16:49               ` Jan Harkes
2002-10-18 17:03                 ` Trond Myklebust
2002-10-18 17:12                   ` Jan Harkes
2002-10-18 17:41                     ` Trond Myklebust
2002-10-18 18:23                       ` Jan Harkes
2002-10-18 19:23                         ` Trond Myklebust
2002-10-21 17:07                           ` Jan Harkes

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=20021017221652.GA26692@ravel.coda.cs.cmu.edu \
    --to=jaharkes@cs.cmu.edu \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=marcelo@conectiva.com.br \
    --cc=trond.myklebust@fys.uio.no \
    --cc=viro@math.psu.edu \
    /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).