All of lore.kernel.org
 help / color / mirror / Atom feed
From: NeilBrown <neilb@suse.de>
To: "Myklebust, Trond" <Trond.Myklebust@netapp.com>,
	Alexander Viro <viro@zeniv.linux.org.uk>
Cc: NFS <linux-nfs@vger.kernel.org>
Subject: NFSv4 cannot unmount ESTALE directories (in some cases).
Date: Mon, 21 Jan 2013 13:48:59 +1100	[thread overview]
Message-ID: <20130121134859.24fbd103@notabene.brown> (raw)

[-- Attachment #1: Type: text/plain, Size: 1579 bytes --]


If you use NFSv4 to "mount server:/foo/bar /mnt", then "rm -r" /foo/bar on the
server, then accesses to /mnt will naturally return ESTALE.

Unfortunately "umount /mnt" will also return ESTALE and leave the stale
directory mounted.  Adding "-l" or "-f" to "umount" doesn't help.

The problem is that nfs_lookup_revalidate fails.  As the mountpoint is never
not accessed by a lookup (after the initial mount) it seems a bit pointless
calling d_revalidate in this case ... by maybe not.

I can make the problem go away by testing for LOOKUP_JUMP and having
nfs_lookup_revalidate never fail if that flag it set (for a directory).

The resulting patch is:
---
 fs/nfs/dir.c |    7 +++++++
 1 file changed, 7 insertions(+)

--- linux-3.0-SLE11-SP2.orig/fs/nfs/dir.c
+++ linux-3.0-SLE11-SP2/fs/nfs/dir.c
@@ -1183,6 +1183,13 @@ out_zap_parent:
 			goto out_valid;
 		if (dentry->d_flags & DCACHE_DISCONNECTED)
 			goto out_valid;
+		if (flags & LOOKUP_JUMPED)
+			/* Didn't use a name to get here, so saying
+			 * the name is invalid is pointless.
+			 * This allows "umount" to succeed on a
+			 * STALE mountpoint.
+			 */
+			goto out_valid;
 		shrink_dcache_parent(dentry);
 	}
 	d_drop(dentry);


However I cannot easily tell if this is an elegant solution of an ugly hack,
and am hoping that someone who understands revalidation and LOOKUP_JUMPED
better than I (who only discovered the latter today) could provide advice.

Al?  Trond?  Should  I make this into a formal patch submission, or is there
a better way?

Thanks,
NeilBrown

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 828 bytes --]

             reply	other threads:[~2013-01-21  2:49 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-21  2:48 NeilBrown [this message]
2013-01-21  3:09 ` NFSv4 cannot unmount ESTALE directories (in some cases) Al Viro
2013-02-02  6:28   ` dE .

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=20130121134859.24fbd103@notabene.brown \
    --to=neilb@suse.de \
    --cc=Trond.Myklebust@netapp.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /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.