patch-2.4.20 linux-2.4.20/fs/nfsd/nfsxdr.c
Next file: linux-2.4.20/fs/nfsd/vfs.c
Previous file: linux-2.4.20/fs/nfsd/nfssvc.c
Back to the patch index
Back to the overall index
- Lines: 52
- Date:
Thu Nov 28 15:53:15 2002
- Orig file:
linux-2.4.19/fs/nfsd/nfsxdr.c
- Orig date:
Wed Oct 17 14:16:34 2001
diff -urN linux-2.4.19/fs/nfsd/nfsxdr.c linux-2.4.20/fs/nfsd/nfsxdr.c
@@ -132,8 +132,9 @@
}
static inline u32 *
-encode_fattr(struct svc_rqst *rqstp, u32 *p, struct inode *inode)
+encode_fattr(struct svc_rqst *rqstp, u32 *p, struct svc_fh *fhp)
{
+ struct inode *inode = fhp->fh_dentry->d_inode;
int type = (inode->i_mode & S_IFMT);
*p++ = htonl(nfs_ftypes[type >> 12]);
@@ -153,7 +154,12 @@
else
*p++ = htonl(0xffffffff);
*p++ = htonl((u32) inode->i_blocks);
- *p++ = htonl((u32) inode->i_dev);
+ if (rqstp->rq_reffh->fh_version == 1
+ && rqstp->rq_reffh->fh_fsid_type == 1
+ && (fhp->fh_export->ex_flags & NFSEXP_FSID))
+ *p++ = htonl((u32) fhp->fh_export->ex_fsid);
+ else
+ *p++ = htonl((u32) inode->i_dev);
*p++ = htonl((u32) inode->i_ino);
*p++ = htonl((u32) inode->i_atime);
*p++ = 0;
@@ -332,7 +338,7 @@
nfssvc_encode_attrstat(struct svc_rqst *rqstp, u32 *p,
struct nfsd_attrstat *resp)
{
- p = encode_fattr(rqstp, p, resp->fh.fh_dentry->d_inode);
+ p = encode_fattr(rqstp, p, &resp->fh);
return xdr_ressize_check(rqstp, p);
}
@@ -341,7 +347,7 @@
struct nfsd_diropres *resp)
{
p = encode_fh(p, &resp->fh);
- p = encode_fattr(rqstp, p, resp->fh.fh_dentry->d_inode);
+ p = encode_fattr(rqstp, p, &resp->fh);
return xdr_ressize_check(rqstp, p);
}
@@ -358,7 +364,7 @@
nfssvc_encode_readres(struct svc_rqst *rqstp, u32 *p,
struct nfsd_readres *resp)
{
- p = encode_fattr(rqstp, p, resp->fh.fh_dentry->d_inode);
+ p = encode_fattr(rqstp, p, &resp->fh);
*p++ = htonl(resp->count);
p += XDR_QUADLEN(resp->count);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)