Message ID | 1307027840-3137-1-git-send-email-andros@netapp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, 2011-06-02 at 11:17 -0400, andros@netapp.com wrote: > From: Andy Adamson <andros@netapp.com> > > Commit 28331a46d88459788c8fca72dbb0415cd7f514c9 "Ensure we request the > ordinary fileid when doing readdirplus" > changed the meaning of NFS_ATTR_FATTR_FILEID which used to be set when > FATTR4_WORD1_MOUNTED_ON_FILED was requested. Request FATTR4_WORD0_FILEID > in the nfs4_proc_fs_locations GETATTR so that nfs_fhget succeeds and > the referral is mounted. > > Signed-off-by: Andy Adamson <andros@netapp.com> > --- > fs/nfs/nfs4proc.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c > index d2c4b59..d99c5f8 100644 > --- a/fs/nfs/nfs4proc.c > +++ b/fs/nfs/nfs4proc.c > @@ -4685,7 +4685,8 @@ int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name, > { > struct nfs_server *server = NFS_SERVER(dir); > u32 bitmask[2] = { > - [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS, > + [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS | > + FATTR4_WORD0_FILEID, > [1] = FATTR4_WORD1_MOUNTED_ON_FILEID, > }; > struct nfs4_fs_locations_arg args = { Nope. We can't do this... The ordinary fileid is _not_ supposed to be supported for an absent filesystem. See RFC3530bis, section 7.3.1. The correct thing to do here is rather to allow the nfs_fhget() to succeed with only a mounted_on_fileid if (and only if!) NFS_ATTR_FATTR_MOUNTPOINT or NFS_ATTR_FATTR_V4_REFERRAL are set. Cheers Trond
On Jun 2, 2011, at 12:14 PM, Trond Myklebust wrote: > On Thu, 2011-06-02 at 11:17 -0400, andros@netapp.com wrote: >> From: Andy Adamson <andros@netapp.com> >> >> Commit 28331a46d88459788c8fca72dbb0415cd7f514c9 "Ensure we request the >> ordinary fileid when doing readdirplus" >> changed the meaning of NFS_ATTR_FATTR_FILEID which used to be set when >> FATTR4_WORD1_MOUNTED_ON_FILED was requested. Request FATTR4_WORD0_FILEID >> in the nfs4_proc_fs_locations GETATTR so that nfs_fhget succeeds and >> the referral is mounted. >> >> Signed-off-by: Andy Adamson <andros@netapp.com> >> --- >> fs/nfs/nfs4proc.c | 3 ++- >> 1 files changed, 2 insertions(+), 1 deletions(-) >> >> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c >> index d2c4b59..d99c5f8 100644 >> --- a/fs/nfs/nfs4proc.c >> +++ b/fs/nfs/nfs4proc.c >> @@ -4685,7 +4685,8 @@ int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name, >> { >> struct nfs_server *server = NFS_SERVER(dir); >> u32 bitmask[2] = { >> - [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS, >> + [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS | >> + FATTR4_WORD0_FILEID, >> [1] = FATTR4_WORD1_MOUNTED_ON_FILEID, >> }; >> struct nfs4_fs_locations_arg args = { > > Nope. We can't do this... > > The ordinary fileid is _not_ supposed to be supported for an absent > filesystem. See RFC3530bis, section 7.3.1. > > The correct thing to do here is rather to allow the nfs_fhget() to > succeed with only a mounted_on_fileid if (and only if!) > NFS_ATTR_FATTR_MOUNTPOINT or NFS_ATTR_FATTR_V4_REFERRAL are set. Ahh. OK - WIll do. -->Andy > > Cheers > Trond > > -- > Trond Myklebust > Linux NFS client maintainer > > NetApp > Trond.Myklebust@netapp.com > www.netapp.com > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index d2c4b59..d99c5f8 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -4685,7 +4685,8 @@ int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name, { struct nfs_server *server = NFS_SERVER(dir); u32 bitmask[2] = { - [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS, + [0] = FATTR4_WORD0_FSID | FATTR4_WORD0_FS_LOCATIONS | + FATTR4_WORD0_FILEID, [1] = FATTR4_WORD1_MOUNTED_ON_FILEID, }; struct nfs4_fs_locations_arg args = {