summaryrefslogtreecommitdiff
path: root/usr/src/uts
diff options
context:
space:
mode:
authormarks <none@none>2008-07-28 09:58:39 -0700
committermarks <none@none>2008-07-28 09:58:39 -0700
commit5535ab6e7748fff4e1f937799d1c2f89b87a90e2 (patch)
treef894fdcdb8971cd935b98a4e9e1b8f9fb3a019cf /usr/src/uts
parent3cf6f95f0e20ed31de99608fdb0a120190d5438f (diff)
downloadillumos-joyent-5535ab6e7748fff4e1f937799d1c2f89b87a90e2.tar.gz
6730382 New regression in nfs4 after CREATE_XATTR_DIR handling changes
Diffstat (limited to 'usr/src/uts')
-rw-r--r--usr/src/uts/common/fs/nfs/nfs4_srv_attr.c6
-rw-r--r--usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c16
2 files changed, 16 insertions, 6 deletions
diff --git a/usr/src/uts/common/fs/nfs/nfs4_srv_attr.c b/usr/src/uts/common/fs/nfs/nfs4_srv_attr.c
index 66780eb4d5..01b9ef8de5 100644
--- a/usr/src/uts/common/fs/nfs/nfs4_srv_attr.c
+++ b/usr/src/uts/common/fs/nfs/nfs4_srv_attr.c
@@ -599,8 +599,12 @@ rfs4_fattr4_named_attr(nfs4_attr_cmd_t cmd, struct nfs4_svgetit_arg *sarg,
case NFS4ATTR_VERIT:
ASSERT(sarg->cs->vp != NULL);
if (sarg->cs->vp->v_vfsp->vfs_flag & VFS_XATTR) {
- error = VOP_PATHCONF(sarg->cs->vp, _PC_XATTR_EXISTS,
+ error = VOP_PATHCONF(sarg->cs->vp, _PC_SATTR_EXISTS,
&val, sarg->cs->cr, NULL);
+ if (error || val == 0)
+ error = VOP_PATHCONF(sarg->cs->vp,
+ _PC_XATTR_EXISTS, &val,
+ sarg->cs->cr, NULL);
if (error)
break;
} else
diff --git a/usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c b/usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c
index 0417c30681..4e3c1bd8c5 100644
--- a/usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c
+++ b/usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -874,14 +874,20 @@ reencode_attrs:
if (ae & FATTR4_NAMED_ATTR_MASK) {
uint_t isit;
pc_val = FALSE;
+ int sattr_error;
if (!(vp->v_vfsp->vfs_flag &
- VFS_XATTR)) {
+ VFS_XATTR)) {
isit = FALSE;
} else {
- (void) VOP_PATHCONF(vp,
- _PC_XATTR_EXISTS,
- &pc_val, cs->cr, NULL);
+ sattr_error = VOP_PATHCONF(vp,
+ _PC_SATTR_EXISTS,
+ &pc_val, cs->cr, NULL);
+ if (sattr_error || pc_val == 0)
+ (void) VOP_PATHCONF(vp,
+ _PC_XATTR_EXISTS,
+ &pc_val,
+ cs->cr, NULL);
}
isit = (pc_val ? TRUE : FALSE);
IXDR_PUT_U_INT32(ptr, isit);