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 8ef0964179bc..e15f2cf8ac15 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c | |||
| @@ -1475,7 +1475,8 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp, | |||
| 1475 | err = vfs_getattr(exp->ex_mnt, dentry, &stat); | 1475 | err = vfs_getattr(exp->ex_mnt, dentry, &stat); |
| 1476 | if (err) | 1476 | if (err) |
| 1477 | goto out_nfserr; | 1477 | goto out_nfserr; |
| 1478 | if ((bmval0 & (FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL)) || | 1478 | if ((bmval0 & (FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL | |
| 1479 | FATTR4_WORD0_MAXNAME)) || | ||
| 1479 | (bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | | 1480 | (bmval1 & (FATTR4_WORD1_SPACE_AVAIL | FATTR4_WORD1_SPACE_FREE | |
| 1480 | FATTR4_WORD1_SPACE_TOTAL))) { | 1481 | FATTR4_WORD1_SPACE_TOTAL))) { |
| 1481 | err = vfs_statfs(dentry, &statfs); | 1482 | err = vfs_statfs(dentry, &statfs); |
| @@ -1679,7 +1680,7 @@ out_acl: | |||
| 1679 | if (bmval0 & FATTR4_WORD0_FILEID) { | 1680 | if (bmval0 & FATTR4_WORD0_FILEID) { |
| 1680 | if ((buflen -= 8) < 0) | 1681 | if ((buflen -= 8) < 0) |
| 1681 | goto out_resource; | 1682 | goto out_resource; |
| 1682 | WRITE64((u64) stat.ino); | 1683 | WRITE64(stat.ino); |
| 1683 | } | 1684 | } |
| 1684 | if (bmval0 & FATTR4_WORD0_FILES_AVAIL) { | 1685 | if (bmval0 & FATTR4_WORD0_FILES_AVAIL) { |
| 1685 | if ((buflen -= 8) < 0) | 1686 | if ((buflen -= 8) < 0) |
| @@ -1721,7 +1722,7 @@ out_acl: | |||
| 1721 | if (bmval0 & FATTR4_WORD0_MAXNAME) { | 1722 | if (bmval0 & FATTR4_WORD0_MAXNAME) { |
| 1722 | if ((buflen -= 4) < 0) | 1723 | if ((buflen -= 4) < 0) |
| 1723 | goto out_resource; | 1724 | goto out_resource; |
| 1724 | WRITE32(~(u32) 0); | 1725 | WRITE32(statfs.f_namelen); |
| 1725 | } | 1726 | } |
| 1726 | if (bmval0 & FATTR4_WORD0_MAXREAD) { | 1727 | if (bmval0 & FATTR4_WORD0_MAXREAD) { |
| 1727 | if ((buflen -= 8) < 0) | 1728 | if ((buflen -= 8) < 0) |
| @@ -1821,16 +1822,15 @@ out_acl: | |||
| 1821 | WRITE32(stat.mtime.tv_nsec); | 1822 | WRITE32(stat.mtime.tv_nsec); |
| 1822 | } | 1823 | } |
| 1823 | if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) { | 1824 | if (bmval1 & FATTR4_WORD1_MOUNTED_ON_FILEID) { |
| 1824 | struct dentry *mnt_pnt, *mnt_root; | ||
| 1825 | |||
| 1826 | if ((buflen -= 8) < 0) | 1825 | if ((buflen -= 8) < 0) |
| 1827 | goto out_resource; | 1826 | goto out_resource; |
| 1828 | mnt_root = exp->ex_mnt->mnt_root; | 1827 | if (exp->ex_mnt->mnt_root->d_inode == dentry->d_inode) { |
| 1829 | if (mnt_root->d_inode == dentry->d_inode) { | 1828 | err = vfs_getattr(exp->ex_mnt->mnt_parent, |
| 1830 | mnt_pnt = exp->ex_mnt->mnt_mountpoint; | 1829 | exp->ex_mnt->mnt_mountpoint, &stat); |
| 1831 | WRITE64((u64) mnt_pnt->d_inode->i_ino); | 1830 | if (err) |
| 1832 | } else | 1831 | goto out_nfserr; |
| 1833 | WRITE64((u64) stat.ino); | 1832 | } |
| 1833 | WRITE64(stat.ino); | ||
| 1834 | } | 1834 | } |
| 1835 | *attrlenp = htonl((char *)p - (char *)attrlenp - 4); | 1835 | *attrlenp = htonl((char *)p - (char *)attrlenp - 4); |
| 1836 | *countp = p - buffer; | 1836 | *countp = p - buffer; |
