On Thu May 05, 2011 at 10:35:41AM -0500, Tyler Hicks <tyhicks@xxxxxxxxxxxxxxxxxx> wrote: > To add support for eCryptfs mounts on top of NFS client mounts, the NFS > client must properly handle NULL nameidata pointers in its d_revalidate > functions. > > NFS clients should also handle NULL nameidata in its create functions, > although this is not currently required for eCryptfs support. > > Signed-off-by: Tyler Hicks <tyhicks@xxxxxxxxxxxxxxxxxx> > --- We (eCryptfs) are in the process of switching mailing lists, so I copied both the old (launchpad.net) and the new (vger.kernel.org), but it doesn't look like the vger.kernel.org list is accepting mail yet. Sorry about that, I should have tested it first. Feel free to drop it from any replies. I should also mention that if/when this patch is merged, eCryptfs will have basic support of mounting on top of NFSv3 client mounts. I say basic because I'm sure there are some bugs, I'm not yet confident that the required cache flushes are there in the eCryptfs layer to have NFSv3 cache consistency, and we have some trouble with silly rename. All files unlinked through eCryptfs get silly renamed in the NFS client because of the extra reference eCryptfs holds on the NFS dentry. This also seems to come into play when unlinking the last file in a directory and then immediately removing the directory. nfs_rmdir() will sometimes return -EBUSY. BTW, I think these are all issues that should be handled in the eCryptfs layer, but I wanted to provide an update on the status of eCryptfs on top of NFS. Tyler > fs/nfs/dir.c | 8 ++++---- > 1 files changed, 4 insertions(+), 4 deletions(-) > > diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c > index 7237672..03c6ab2 100644 > --- a/fs/nfs/dir.c > +++ b/fs/nfs/dir.c > @@ -1095,7 +1095,7 @@ static int nfs_lookup_revalidate(struct dentry *dentry, struct nameidata *nd) > struct nfs_fattr *fattr = NULL; > int error; > > - if (nd->flags & LOOKUP_RCU) > + if (nd && nd->flags & LOOKUP_RCU) > return -ECHILD; > > parent = dget_parent(dentry); > @@ -1493,7 +1493,7 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd) > struct nfs_open_context *ctx; > int openflags, ret = 0; > > - if (nd->flags & LOOKUP_RCU) > + if (nd && nd->flags & LOOKUP_RCU) > return -ECHILD; > > inode = dentry->d_inode; > @@ -1583,7 +1583,7 @@ static int nfs_open_create(struct inode *dir, struct dentry *dentry, int mode, > attr.ia_mode = mode; > attr.ia_valid = ATTR_MODE; > > - if ((nd->flags & LOOKUP_CREATE) != 0) { > + if (nd && (nd->flags & LOOKUP_CREATE) != 0) { > open_flags = nd->intent.open.flags; > > ctx = nameidata_to_nfs_open_context(dentry, nd); > @@ -1673,7 +1673,7 @@ static int nfs_create(struct inode *dir, struct dentry *dentry, int mode, > attr.ia_mode = mode; > attr.ia_valid = ATTR_MODE; > > - if ((nd->flags & LOOKUP_CREATE) != 0) > + if (nd && (nd->flags & LOOKUP_CREATE) != 0) > open_flags = nd->intent.open.flags; > > error = NFS_PROTO(dir)->create(dir, dentry, &attr, open_flags, NULL); > -- > 1.7.4.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html