diff options
Diffstat (limited to 'fs/nfsd/nfs4xdr.c')
-rw-r--r-- | fs/nfsd/nfs4xdr.c | 22 |
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; |