summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorrmacklem <rmacklem@FreeBSD.org>2014-05-07 22:27:03 +0000
committerrmacklem <rmacklem@FreeBSD.org>2014-05-07 22:27:03 +0000
commitbd43d1e404c494711f7b33898a593b3a9e78f828 (patch)
treebe79ec1a33b2bbcb9dc7bd27d8465387cc2a20b5 /sys
parentd41ec318f9450a569a2d83b56c63243d8f513c51 (diff)
downloadFreeBSD-src-bd43d1e404c494711f7b33898a593b3a9e78f828.zip
FreeBSD-src-bd43d1e404c494711f7b33898a593b3a9e78f828.tar.gz
MFC: r264842
Modify the NFSv4 client's Pathconf RPC (actually a Getattr Op.) so that it only does the RPC for names that are answered by the RPC. Doing the RPC for other names is harmless, but unnecessary.
Diffstat (limited to 'sys')
-rw-r--r--sys/fs/nfsclient/nfs_clvnops.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c
index fa1433f..83b48b4 100644
--- a/sys/fs/nfsclient/nfs_clvnops.c
+++ b/sys/fs/nfsclient/nfs_clvnops.c
@@ -3430,12 +3430,15 @@ nfs_pathconf(struct vop_pathconf_args *ap)
struct thread *td = curthread;
int attrflag, error;
- if (NFS_ISV4(vp) || (NFS_ISV3(vp) && (ap->a_name == _PC_LINK_MAX ||
+ if ((NFS_ISV34(vp) && (ap->a_name == _PC_LINK_MAX ||
ap->a_name == _PC_NAME_MAX || ap->a_name == _PC_CHOWN_RESTRICTED ||
- ap->a_name == _PC_NO_TRUNC))) {
+ ap->a_name == _PC_NO_TRUNC)) ||
+ (NFS_ISV4(vp) && ap->a_name == _PC_ACL_NFS4)) {
/*
* Since only the above 4 a_names are returned by the NFSv3
* Pathconf RPC, there is no point in doing it for others.
+ * For NFSv4, the Pathconf RPC (actually a Getattr Op.) can
+ * be used for _PC_NFS4_ACL as well.
*/
error = nfsrpc_pathconf(vp, &pc, td->td_ucred, td, &nfsva,
&attrflag, NULL);
OpenPOWER on IntegriCloud