aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4xdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfsd/nfs4xdr.c')
-rw-r--r--fs/nfsd/nfs4xdr.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 163a76c21ac5..57333944af7f 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -1479,7 +1479,8 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
1479 err = vfs_getattr(exp->ex_mnt, dentry, &stat); 1479 err = vfs_getattr(exp->ex_mnt, dentry, &stat);
1480 if (err) 1480 if (err)
1481 goto out_nfserr; 1481 goto out_nfserr;
1482 if ((bmval0 & (FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL)) || 1482 if ((bmval0 & (FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL |
1483 FATTR4_WORD0_MAXNAME)) ||
1483 (bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | 1484 (bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE |
1484 FATTR4_WORD1_SPACE_TOTAL))) { 1485 FATTR4_WORD1_SPACE_TOTAL))) {
1485 err = vfs_statfs(dentry, &statfs); 1486 err = vfs_statfs(dentry, &statfs);
@@ -1683,7 +1684,7 @@ out_acl:
1683 if (bmval0 & FATTR4_WORD0_FILEID) { 1684 if (bmval0 & FATTR4_WORD0_FILEID) {
1684 if ((buflen -= 8) < 0) 1685 if ((buflen -= 8) < 0)
1685 goto out_resource; 1686 goto out_resource;
1686 WRITE64((u64) stat.ino); 1687 WRITE64(stat.ino);
1687 } 1688 }
1688 if (bmval0 & FATTR4_WORD0_FILES_AVAIL) { 1689 if (bmval0 & FATTR4_WORD0_FILES_AVAIL) {
1689 if ((buflen -= 8) < 0) 1690 if ((buflen -= 8) < 0)
@@ -1725,7 +1726,7 @@ out_acl:
1725 if (bmval0 & FATTR4_WORD0_MAXNAME) { 1726 if (bmval0 & FATTR4_WORD0_MAXNAME) {
1726 if ((buflen -= 4) < 0) 1727 if ((buflen -= 4) < 0)
1727 goto out_resource; 1728 goto out_resource;
1728 WRITE32(~(u32) 0); 1729 WRITE32(statfs.f_namelen);
1729 } 1730 }
1730 if (bmval0 & FATTR4_WORD0_MAXREAD) { 1731 if (bmval0 & FATTR4_WORD0_MAXREAD) {
1731 if ((buflen -= 8) < 0) 1732 if ((buflen -= 8) < 0)
@@ -1825,16 +1826,15 @@ out_acl:
1825 WRITE32(stat.mtime.tv_nsec); 1826 WRITE32(stat.mtime.tv_nsec);
1826 } 1827 }
1827 if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) { 1828 if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) {
1828 struct dentry *mnt_pnt, *mnt_root;
1829
1830 if ((buflen -= 8) < 0) 1829 if ((buflen -= 8) < 0)
1831 goto out_resource; 1830 goto out_resource;
1832 mnt_root = exp->ex_mnt->mnt_root; 1831 if (exp->ex_mnt->mnt_root->d_inode == dentry->d_inode) {
1833 if (mnt_root->d_inode == dentry->d_inode) { 1832 err = vfs_getattr(exp->ex_mnt->mnt_parent,
1834 mnt_pnt = exp->ex_mnt->mnt_mountpoint; 1833 exp->ex_mnt->mnt_mountpoint, &stat);
1835 WRITE64((u64) mnt_pnt->d_inode->i_ino); 1834 if (err)
1836 } else 1835 goto out_nfserr;
1837 WRITE64((u64) stat.ino); 1836 }
1837 WRITE64(stat.ino);
1838 } 1838 }
1839 *attrlenp = htonl((char *)p - (char *)attrlenp - 4); 1839 *attrlenp = htonl((char *)p - (char *)attrlenp - 4);
1840 *countp = p - buffer; 1840 *countp = p - buffer;