From: NeilBrown Return the special NFSv4 pseudo filesystem fsid (0/0) in a GETATTR on an NFSv4 pseudo filesystem node. Signed-off-by: Andy Adamson Signed-off-by: J. Bruce Fields Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- 25-akpm/fs/nfsd/nfs4xdr.c | 15 ++++++++++----- 1 files changed, 10 insertions(+), 5 deletions(-) diff -puN fs/nfsd/nfs4xdr.c~knfsd-nfsd4-use-the-fsid-export-option-when-returning-the-fsid-attribute fs/nfsd/nfs4xdr.c --- 25/fs/nfsd/nfs4xdr.c~knfsd-nfsd4-use-the-fsid-export-option-when-returning-the-fsid-attribute 2004-11-15 22:07:06.743563824 -0800 +++ 25-akpm/fs/nfsd/nfs4xdr.c 2004-11-15 22:07:06.748563064 -0800 @@ -1425,7 +1425,7 @@ nfsd4_encode_fattr(struct svc_fh *fhp, s if (status) goto out_nfserr; } - if ((bmval0 & FATTR4_WORD0_FILEHANDLE) && !fhp) { + if ((bmval0 & (FATTR4_WORD0_FILEHANDLE | FATTR4_WORD0_FSID)) && !fhp) { fh_init(&tempfh, NFS4_FHSIZE); status = fh_compose(&tempfh, exp, dentry, NULL); if (status) @@ -1508,10 +1508,15 @@ nfsd4_encode_fattr(struct svc_fh *fhp, s if (bmval0 & FATTR4_WORD0_FSID) { if ((buflen -= 16) < 0) goto out_resource; - WRITE32(0); - WRITE32(MAJOR(stat.dev)); - WRITE32(0); - WRITE32(MINOR(stat.dev)); + if (is_fsid(fhp, rqstp->rq_reffh)) { + WRITE64((u64)exp->ex_fsid); + WRITE64((u64)0); + } else { + WRITE32(0); + WRITE32(MAJOR(stat.dev)); + WRITE32(0); + WRITE32(MINOR(stat.dev)); + } } if (bmval0 & FATTR4_WORD0_UNIQUE_HANDLES) { if ((buflen -= 4) < 0) _