From: Trond Myklebust <trond.myklebust@fys.uio.no>
To: David Howells <dhowells@redhat.com>
Cc: Andrew Morton <akpm@osdl.org>,
torvalds@osdl.org, steved@redhat.com,
linux-fsdevel@vger.kernel.org, linux-cachefs@redhat.com,
nfsv4@linux-nfs.org, linux-kernel@vger.kernel.org,
Ian Kent <raven@themaw.net>
Subject: Re: [PATCH 0/7] Permit filesystem local caching and NFS superblock sharing [try #13]
Date: Mon, 04 Sep 2006 22:23:47 -0400 [thread overview]
Message-ID: <1157423027.5510.23.camel@localhost> (raw)
In-Reply-To: <28945.1157370732@warthog.cambridge.redhat.com>
[-- Attachment #1: Type: text/plain, Size: 3389 bytes --]
On Mon, 2006-09-04 at 12:52 +0100, David Howells wrote:
> Andrew Morton <akpm@osdl.org> wrote:
>
> > sony:/home/akpm> ls -l /net/bix/usr/src
> > total 0
> >
> > sony:/home/akpm> showmount -e bix
> > Export list for bix:
> > / *
> > /usr/src *
> > /mnt/export *
>
> Yes, but what's your /etc/exports now? Not all options appear to showmount.
>
> Can you add "nohide" to the /usr/src and /mnt/export lines and "fsid=0" to the
> / line if you don't currently have them and try again?
>
> > iirc, we decided this is related to the fs-cache infrastructure work which
> > went into git-nfs. I think David can reproduce this?
>
> I'd only reproduced it with SELinux in enforcing mode.
>
> Under such conditions, unless there's a readdir on the root directory, the
> subdirs under which exports exist will remain as incorrectly negative
> dentries.
>
> The problem is a conjunction of circumstances:
>
> (1) nfs_lookup() has a shortcut in it that skips contact with the server if
> we're doing a lookup with intent to create. This leaves an incorrectly
> negative dentry if there _is_ actually an object on the server.
>
> (2) The mkdir procedure is aborted between the lookup() op and the mkdir() op
> by SELinux (see vfs_mkdir()). Note that SELinux isn't the _only_ method
> by which the abort can occur.
>
> (3) One of my patches correctly assigns the security label to the automounted
> root dentry.
>
> (4) SELinux then aborts the automounter's mkdir() call because the automounter
> does _not_ carry the correct security label to write to the NFS directory.
>
> (5) The incorrectly set up dentry from (1) remains because the the mkdir() op
> is not invoked to set it right.
>
> The only bit I added was (3), but that's not the only circumstance in which
> this can occur.
>
>
> If, for example, I do "chmod a-w /" on the NFS server, I can see the same
> effects on the client without the need for SELinux to put its foot in the door.
> Automount does:
>
> [pid 3838] mkdir("/net", 0555) = -1 EEXIST (File exists)
> [pid 3838] stat64("/net", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
> [pid 3838] mkdir("/net/trash", 0555) = -1 EEXIST (File exists)
> [pid 3838] stat64("/net/trash", {st_mode=S_IFDIR|0555, st_size=1024, ...}) = 0
> [pid 3838] mkdir("/net/trash/mnt", 0555) = -1 EACCES (Permission denied)
>
> And where I was listing the disputed directory, I see:
>
> [root@andromeda ~]# ls -lad /net/trash/usr/src
> drwxr-xr-x 4 root root 1024 Aug 30 10:35 /net/trash/usr/src/
> [root@andromeda ~]#
>
> which isn't what I'd expect. What I'd expect is:
>
> [root@andromeda ~]# ls -l /net/trash/usr/src
> total 15
> drwxr-xr-x 3 root root 1024 Aug 30 10:35 debug/
> -rw-r--r-- 1 root root 0 Aug 16 10:01 hello
> drwx------ 2 root root 12288 Aug 16 10:00 lost+found/
> [root@andromeda ~]#
One way to fix this is to simply not hash the dentry when we're doing
the O_EXCL intent optimisation, but rather to only hash it _after_ we've
successfully created the file on the server. Something like the attached
patch ought to do it.
Note, though, that this will not fix the autofs problem: autofs is
trying to perform a totally unnecessary mkdir(), and is giving up when
it is told that SELinux won't authorise that particular operation. This
is clearly an autofs bug...
Cheers,
Trond
[-- Attachment #2: linux-2.6.18-063-fix_exclusive_create.dif --]
[-- Type: message/rfc822, Size: 1221 bytes --]
From: Trond Myklebust <Trond.Myklebust@netapp.com>
Subject: No Subject
Date:
Message-ID: <1157422828.5510.19.camel@localhost>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---
fs/nfs/dir.c | 13 ++++++++++---
1 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 51328ae..e83a2ff 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -904,9 +904,14 @@ static struct dentry *nfs_lookup(struct
lock_kernel();
- /* If we're doing an exclusive create, optimize away the lookup */
- if (nfs_is_exclusive_create(dir, nd))
- goto no_entry;
+ /*
+ * If we're doing an exclusive create, optimize away the lookup
+ * but don't hash the dentry.
+ */
+ if (nfs_is_exclusive_create(dir, nd)) {
+ d_instantiate(dentry, NULL);
+ goto out_unlock;
+ }
error = NFS_PROTO(dir)->lookup(dir, &dentry->d_name, &fhandle, &fattr);
if (error == -ENOENT)
@@ -1161,6 +1166,8 @@ int nfs_instantiate(struct dentry *dentr
if (IS_ERR(inode))
return error;
d_instantiate(dentry, inode);
+ if (d_unhashed(dentry))
+ d_rehash(dentry);
return 0;
}
next prev parent reply other threads:[~2006-09-05 2:24 UTC|newest]
Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-30 19:31 [PATCH 0/7] Permit filesystem local caching and NFS superblock sharing [try #13] David Howells
2006-08-30 19:31 ` David Howells
2006-08-30 19:31 ` [PATCH 1/7] FS-Cache: Provide a filesystem-specific sync'able page bit " David Howells
2006-08-30 19:31 ` [PATCH 2/7] FS-Cache: Generic filesystem caching facility " David Howells
2006-08-30 19:32 ` [PATCH 3/7] FS-Cache: Release page->private after failed readahead " David Howells
2006-08-30 19:32 ` [PATCH 4/7] FS-Cache: Make kAFS use FS-Cache " David Howells
2006-08-30 19:32 ` [PATCH 5/7] NFS: Use local caching " David Howells
2006-08-30 19:32 ` [PATCH 6/7] FS-Cache: CacheFiles: ia64: missing copy_page export " David Howells
2006-08-30 19:32 ` [PATCH 7/7] FS-Cache: CacheFiles: A cache that backs onto a mounted filesystem " David Howells
2006-08-30 19:52 ` [PATCH 0/7] Permit filesystem local caching and NFS superblock sharing " Andrew Morton
2006-08-30 19:52 ` Andrew Morton
2006-08-30 20:37 ` David Howells
2006-08-30 20:37 ` David Howells
2006-08-30 20:55 ` Andrew Morton
2006-08-31 9:58 ` David Howells
2006-08-31 9:58 ` David Howells
2006-08-31 17:21 ` Andrew Morton
2006-08-31 17:21 ` Andrew Morton
2006-08-31 17:26 ` Trond Myklebust
2006-08-31 17:26 ` Trond Myklebust
2006-08-31 17:42 ` David Howells
2006-08-31 17:42 ` David Howells
2006-08-31 18:04 ` Andrew Morton
2006-08-31 18:04 ` Andrew Morton
2006-09-01 13:08 ` David Howells
2006-09-01 13:08 ` David Howells
2006-09-01 16:34 ` Andrew Morton
2006-09-01 16:34 ` Andrew Morton
2006-09-01 17:00 ` Trond Myklebust
2006-09-01 17:00 ` Trond Myklebust
2006-09-02 2:50 ` Andrew Morton
2006-09-02 2:50 ` Andrew Morton
2006-09-02 4:11 ` Ian Kent
2006-09-02 4:11 ` Ian Kent
2006-09-02 5:58 ` Andrew Morton
2006-09-02 5:58 ` Andrew Morton
2006-09-03 6:21 ` Ian Kent
2006-09-03 6:21 ` Ian Kent
2006-09-03 6:30 ` Andrew Morton
2006-09-03 6:30 ` Andrew Morton
2006-09-03 6:43 ` Ian Kent
2006-09-03 6:43 ` Ian Kent
2006-09-03 16:58 ` Andrew Morton
2006-09-03 16:58 ` Andrew Morton
2006-09-04 2:23 ` Ian Kent
2006-09-04 2:23 ` Ian Kent
2006-09-04 5:40 ` Ian Kent
2006-09-02 4:49 ` Ian Kent
2006-09-02 4:49 ` Ian Kent
2006-09-04 11:52 ` David Howells
2006-09-04 11:52 ` David Howells
2006-09-04 11:52 ` David Howells
2006-09-04 11:52 ` David Howells
2006-09-04 13:24 ` Ian Kent
2006-09-04 13:24 ` Ian Kent
2006-09-04 13:46 ` David Howells
2006-09-04 13:46 ` David Howells
2006-09-04 15:00 ` Ian Kent
2006-09-04 15:00 ` Ian Kent
2006-09-05 4:11 ` Ian Kent
2006-09-05 4:11 ` Ian Kent
2006-09-05 4:17 ` Trond Myklebust
2006-09-05 4:17 ` Trond Myklebust
2006-09-05 1:57 ` Trond Myklebust
2006-09-05 1:57 ` Trond Myklebust
2006-09-05 2:55 ` Ian Kent
2006-09-05 2:55 ` Ian Kent
2006-09-05 3:50 ` Trond Myklebust
2006-09-05 3:50 ` Trond Myklebust
2006-09-05 4:03 ` Ian Kent
2006-09-05 4:03 ` Ian Kent
2006-09-05 4:53 ` Trond Myklebust
2006-09-05 4:53 ` Trond Myklebust
2006-09-05 6:06 ` Ian Kent
2006-09-05 6:06 ` Ian Kent
2006-09-05 7:01 ` Ian Kent
2006-09-05 7:01 ` Ian Kent
2006-09-05 12:52 ` Trond Myklebust
2006-09-06 4:54 ` Ian Kent
2006-09-06 4:54 ` Ian Kent
2006-09-05 9:40 ` David Howells
2006-09-05 9:40 ` David Howells
2006-09-05 10:20 ` Ian Kent
2006-09-05 10:20 ` Ian Kent
2006-09-05 10:37 ` David Howells
2006-09-05 10:37 ` David Howells
2006-09-05 12:20 ` Ian Kent
2006-09-05 12:20 ` Ian Kent
2006-09-05 13:38 ` David Howells
2006-09-05 13:38 ` David Howells
2006-09-06 4:58 ` Ian Kent
2006-09-06 4:58 ` Ian Kent
2006-09-06 9:51 ` David Howells
2006-09-06 9:51 ` David Howells
2006-09-06 12:46 ` Trond Myklebust
2006-09-06 12:46 ` Trond Myklebust
2006-09-06 13:24 ` David Howells
2006-09-06 13:24 ` David Howells
2006-09-07 5:30 ` Ian Kent
2006-09-07 5:30 ` Ian Kent
2006-09-07 6:17 ` Trond Myklebust
2006-09-07 6:17 ` Trond Myklebust
2006-09-07 7:40 ` Ian Kent
2006-09-05 9:48 ` David Howells
2006-09-05 9:48 ` David Howells
2006-09-05 10:14 ` Ian Kent
2006-09-05 9:57 ` David Howells
2006-09-05 9:57 ` David Howells
2006-09-05 12:47 ` Trond Myklebust
2006-09-05 12:53 ` Trond Myklebust
2006-09-05 12:53 ` Trond Myklebust
2006-09-05 13:40 ` David Howells
2006-09-06 10:27 ` Ian Kent
2006-09-06 10:27 ` Ian Kent
2006-09-05 2:23 ` Trond Myklebust [this message]
2006-09-05 3:01 ` Ian Kent
2006-09-05 3:01 ` Ian Kent
2006-09-05 4:05 ` Trond Myklebust
2006-09-05 4:05 ` Trond Myklebust
2006-09-05 4:06 ` Ian Kent
2006-09-05 4:06 ` Ian Kent
2006-09-05 4:57 ` Trond Myklebust
2006-09-05 6:45 ` Ian Kent
2006-09-05 6:45 ` Ian Kent
2006-09-05 7:07 ` Ian Kent
2006-09-05 7:07 ` Ian Kent
2006-09-04 18:20 ` David Howells
2006-09-04 18:20 ` David Howells
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=1157423027.5510.23.camel@localhost \
--to=trond.myklebust@fys.uio.no \
--cc=akpm@osdl.org \
--cc=dhowells@redhat.com \
--cc=linux-cachefs@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nfsv4@linux-nfs.org \
--cc=raven@themaw.net \
--cc=steved@redhat.com \
--cc=torvalds@osdl.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 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.