diff options
author | marks <none@none> | 2008-07-28 09:58:39 -0700 |
---|---|---|
committer | marks <none@none> | 2008-07-28 09:58:39 -0700 |
commit | 5535ab6e7748fff4e1f937799d1c2f89b87a90e2 (patch) | |
tree | f894fdcdb8971cd935b98a4e9e1b8f9fb3a019cf | |
parent | 3cf6f95f0e20ed31de99608fdb0a120190d5438f (diff) | |
download | illumos-joyent-5535ab6e7748fff4e1f937799d1c2f89b87a90e2.tar.gz |
6730382 New regression in nfs4 after CREATE_XATTR_DIR handling changes
-rw-r--r-- | usr/src/uts/common/fs/nfs/nfs4_srv_attr.c | 6 | ||||
-rw-r--r-- | usr/src/uts/common/fs/nfs/nfs4_srv_readdir.c | 16 |
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); |