summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorJanice Chang <Janice.Chang@Sun.COM>2008-09-30 02:00:40 -0400
committerJanice Chang <Janice.Chang@Sun.COM>2008-09-30 02:00:40 -0400
commit9660e5cb810c5efc22db0f1459461c1f1eec15b9 (patch)
treef1299f0a4c0a801ed25271d7633e916802e68f40 /usr/src
parent7eea693d6b672899726e75993fddc4e95b52647f (diff)
downloadillumos-joyent-9660e5cb810c5efc22db0f1459461c1f1eec15b9.tar.gz
PSARC/2008/588 VFSFT_SYSATTR_VIEWS
6739967 New VFSFT needed for sysattr "view" interface (VFSFT_XVATTR currently overloaded)
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/fs/nfs/nfs4_srv.c19
-rw-r--r--usr/src/uts/common/fs/nfs/nfs4_vnops.c2
-rw-r--r--usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c9
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_fsops.c22
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_tree.c3
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_vops.c5
-rw-r--r--usr/src/uts/common/fs/tmpfs/tmp_vfsops.c6
-rw-r--r--usr/src/uts/common/fs/tmpfs/tmp_vnops.c4
-rw-r--r--usr/src/uts/common/fs/ufs/ufs_vfsops.c4
-rw-r--r--usr/src/uts/common/fs/ufs/ufs_vnops.c2
-rw-r--r--usr/src/uts/common/fs/vfs.c8
-rw-r--r--usr/src/uts/common/fs/xattr.c5
-rw-r--r--usr/src/uts/common/fs/zfs/zfs_vfsops.c1
-rw-r--r--usr/src/uts/common/fs/zfs/zfs_vnops.c12
-rw-r--r--usr/src/uts/common/smbsrv/smb_ktypes.h10
-rw-r--r--usr/src/uts/common/smbsrv/smb_vops.h3
-rw-r--r--usr/src/uts/common/sys/vfs.h3
-rw-r--r--usr/src/uts/common/syscall/open.c4
18 files changed, 31 insertions, 91 deletions
diff --git a/usr/src/uts/common/fs/nfs/nfs4_srv.c b/usr/src/uts/common/fs/nfs/nfs4_srv.c
index 1185f05abf..15fb7d1fb1 100644
--- a/usr/src/uts/common/fs/nfs/nfs4_srv.c
+++ b/usr/src/uts/common/fs/nfs/nfs4_srv.c
@@ -2884,25 +2884,8 @@ rfs4_op_openattr(nfs_argop4 *argop, nfs_resop4 *resop, struct svc_req *req,
goto out;
}
- /*
- * Make a couple of checks made by copen()
- *
- * Check to make sure underlying fs supports xattrs. This
- * is required because solaris filesystem implementations
- * (UFS/TMPFS) don't enforce the noxattr mount option
- * in VOP_LOOKUP(LOOKUP_XATTR). If fs doesn't support this
- * pathconf cmd or if fs supports cmd but doesn't claim
- * support for xattr, return NOTSUPP. It would be better
- * to use VOP_PATHCONF( _PC_XATTR_ENABLED) for this; however,
- * that cmd is not available to VOP_PATHCONF interface
- * (it's only implemented inside pathconf syscall)...
- *
- * Verify permission to put attributes on files (access
- * checks from copen).
- */
-
if ((cs->vp->v_vfsp->vfs_flag & VFS_XATTR) == 0 &&
- !vfs_has_feature(cs->vp->v_vfsp, VFSFT_XVATTR)) {
+ !vfs_has_feature(cs->vp->v_vfsp, VFSFT_SYSATTR_VIEWS)) {
*cs->statusp = resp->status = puterrno4(ENOTSUP);
goto out;
}
diff --git a/usr/src/uts/common/fs/nfs/nfs4_vnops.c b/usr/src/uts/common/fs/nfs/nfs4_vnops.c
index 4caafc6049..3b0f8c4ba1 100644
--- a/usr/src/uts/common/fs/nfs/nfs4_vnops.c
+++ b/usr/src/uts/common/fs/nfs/nfs4_vnops.c
@@ -4968,7 +4968,7 @@ nfs4lookup_xattr(vnode_t *dvp, char *nm, vnode_t **vpp, int flags, cred_t *cr)
mi = VTOMI4(dvp);
if (!(mi->mi_vfsp->vfs_flag & VFS_XATTR) &&
- !vfs_has_feature(mi->mi_vfsp, VFSFT_XVATTR))
+ !vfs_has_feature(mi->mi_vfsp, VFSFT_SYSATTR_VIEWS))
return (EINVAL);
drp = VTOR4(dvp);
diff --git a/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c b/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c
index 4a56133b4a..1713538614 100644
--- a/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c
+++ b/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c
@@ -222,14 +222,7 @@ const fs_operation_def_t smbfs_vnodeops_template[] = {
* XXX
* When new and relevant functionality is enabled, we should be
* calling vfs_set_feature() to inform callers that pieces of
- * functionality are available, per PSARC 2007/227, e.g.
- *
- * VFSFT_XVATTR Supports xvattr for attrs
- * VFSFT_CASEINSENSITIVE Supports case-insensitive
- * VFSFT_NOCASESENSITIVE NOT case-sensitive
- * VFSFT_DIRENTFLAGS Supports dirent flags
- * VFSFT_ACLONCREATE Supports ACL on create
- * VFSFT_ACEMASKONACCESS Can use ACEMASK for access
+ * functionality are available, per PSARC 2007/227.
*/
/* ARGSUSED */
static int
diff --git a/usr/src/uts/common/fs/smbsrv/smb_fsops.c b/usr/src/uts/common/fs/smbsrv/smb_fsops.c
index c501ec67bf..e8b9ad5d1f 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_fsops.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_fsops.c
@@ -161,7 +161,6 @@ smb_fsop_create_with_sd(
int flags = 0;
int rc;
boolean_t is_dir;
- boolean_t no_xvattr = B_FALSE;
ASSERT(fs_sd);
@@ -230,12 +229,8 @@ smb_fsop_create_with_sd(
set_attr.sa_mask |= SMB_AT_GID;
}
- if (set_attr.sa_mask) {
- if (smb_tree_has_feature(sr->tid_tree, SMB_TREE_UFS))
- no_xvattr = B_TRUE;
- rc = smb_vop_setattr(vp, NULL, &set_attr, 0, kcred,
- no_xvattr);
- }
+ if (set_attr.sa_mask)
+ rc = smb_vop_setattr(vp, NULL, &set_attr, 0, kcred);
if (rc == 0) {
*ret_snode = smb_node_lookup(sr, &sr->arg.open, cr, vp,
@@ -316,7 +311,6 @@ smb_fsop_create(
smb_attr_t *ret_attr)
{
struct open_param *op = &sr->arg.open;
- boolean_t no_xvattr = B_FALSE;
smb_node_t *fnode;
smb_attr_t file_attr;
vnode_t *xattrdirvp;
@@ -423,9 +417,6 @@ smb_fsop_create(
return (rc);
}
- if (smb_tree_has_feature(sr->tid_tree, SMB_TREE_UFS))
- no_xvattr = B_TRUE;
-
attr->sa_vattr.va_uid = file_attr.sa_vattr.va_uid;
attr->sa_vattr.va_gid = file_attr.sa_vattr.va_gid;
attr->sa_mask = SMB_AT_UID | SMB_AT_GID;
@@ -438,7 +429,7 @@ smb_fsop_create(
* stream) file (see comments for smb_vop_setattr()).
*/
- rc = smb_vop_setattr(vp, NULL, attr, 0, kcred, no_xvattr);
+ rc = smb_vop_setattr(vp, NULL, attr, 0, kcred);
if (rc != 0) {
smb_node_release(fnode);
@@ -1270,7 +1261,6 @@ smb_fsop_setattr(
int rc = 0;
int flags = 0;
uint_t sa_mask;
- boolean_t no_xvattr = B_FALSE;
ASSERT(cr);
ASSERT(snode);
@@ -1327,12 +1317,8 @@ smb_fsop_setattr(
ASSERT(unnamed_node->n_state != SMB_NODE_STATE_DESTROYING);
unnamed_vp = unnamed_node->vp;
}
- if (sr && sr->tid_tree)
- if (smb_tree_has_feature(sr->tid_tree, SMB_TREE_UFS))
- no_xvattr = B_TRUE;
- rc = smb_vop_setattr(snode->vp, unnamed_vp, set_attr, flags, cr,
- no_xvattr);
+ rc = smb_vop_setattr(snode->vp, unnamed_vp, set_attr, flags, cr);
if ((rc == 0) && ret_attr) {
/*
diff --git a/usr/src/uts/common/fs/smbsrv/smb_tree.c b/usr/src/uts/common/fs/smbsrv/smb_tree.c
index e8ef9e87d1..872fc5b924 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_tree.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_tree.c
@@ -764,9 +764,6 @@ smb_tree_get_flags(vfs_t *vfsp, smb_tree_t *tree)
if (strncasecmp(name, NFS, sizeof (NFS)) == 0)
flags |= SMB_TREE_NFS_MOUNTED;
- if (strncasecmp(name, "UFS", sizeof ("UFS")) == 0)
- flags |= SMB_TREE_UFS;
-
(void) strlcpy(tree->t_typename, name, SMB_TYPENAMELEN);
(void) utf8_strupr((char *)tree->t_typename);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_vops.c b/usr/src/uts/common/fs/smbsrv/smb_vops.c
index fad386c5c6..62e642b282 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_vops.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_vops.c
@@ -403,7 +403,7 @@ smb_vop_getattr(vnode_t *vp, vnode_t *unnamed_vp, smb_attr_t *ret_attr,
int
smb_vop_setattr(vnode_t *vp, vnode_t *unnamed_vp, smb_attr_t *set_attr,
- int flags, cred_t *cr, boolean_t no_xvattr)
+ int flags, cred_t *cr)
{
int error = 0;
int at_size = 0;
@@ -428,8 +428,7 @@ smb_vop_setattr(vnode_t *vp, vnode_t *unnamed_vp, smb_attr_t *set_attr,
set_attr->sa_vattr.va_mask = 0;
- if ((no_xvattr == B_FALSE) &&
- vfs_has_feature(use_vp->v_vfsp, VFSFT_XVATTR)) {
+ if (vfs_has_feature(use_vp->v_vfsp, VFSFT_XVATTR)) {
smb_vop_setup_xvattr(set_attr, &xvattr);
vap = &xvattr.xva_vattr;
} else {
diff --git a/usr/src/uts/common/fs/tmpfs/tmp_vfsops.c b/usr/src/uts/common/fs/tmpfs/tmp_vfsops.c
index 4ee833094f..44d7302779 100644
--- a/usr/src/uts/common/fs/tmpfs/tmp_vfsops.c
+++ b/usr/src/uts/common/fs/tmpfs/tmp_vfsops.c
@@ -19,12 +19,10 @@
* 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.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/types.h>
#include <sys/param.h>
#include <sys/sysmacros.h>
@@ -372,7 +370,7 @@ tmp_mount(
out:
if (error == 0)
- vfs_set_feature(vfsp, VFSFT_XVATTR);
+ vfs_set_feature(vfsp, VFSFT_SYSATTR_VIEWS);
return (error);
}
diff --git a/usr/src/uts/common/fs/tmpfs/tmp_vnops.c b/usr/src/uts/common/fs/tmpfs/tmp_vnops.c
index 3248df1b26..c036d27fec 100644
--- a/usr/src/uts/common/fs/tmpfs/tmp_vnops.c
+++ b/usr/src/uts/common/fs/tmpfs/tmp_vnops.c
@@ -23,8 +23,6 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/types.h>
#include <sys/param.h>
#include <sys/t_lock.h>
@@ -2381,7 +2379,7 @@ tmp_pathconf(
break;
case _PC_SATTR_ENABLED:
case _PC_SATTR_EXISTS:
- *valp = vfs_has_feature(vp->v_vfsp, VFSFT_XVATTR) &&
+ *valp = vfs_has_feature(vp->v_vfsp, VFSFT_SYSATTR_VIEWS) &&
(vp->v_type == VREG || vp->v_type == VDIR);
error = 0;
break;
diff --git a/usr/src/uts/common/fs/ufs/ufs_vfsops.c b/usr/src/uts/common/fs/ufs/ufs_vfsops.c
index d2783fede8..b443a6850c 100644
--- a/usr/src/uts/common/fs/ufs/ufs_vfsops.c
+++ b/usr/src/uts/common/fs/ufs/ufs_vfsops.c
@@ -37,8 +37,6 @@
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/types.h>
#include <sys/t_lock.h>
#include <sys/param.h>
@@ -427,7 +425,7 @@ ufs_mount(struct vfs *vfsp, struct vnode *mvp, struct mounta *uap,
dpn.pn_path, cr, 0, &args, datalen);
if (error == 0) {
- vfs_set_feature(vfsp, VFSFT_XVATTR);
+ vfs_set_feature(vfsp, VFSFT_SYSATTR_VIEWS);
/*
* If lofi, drop our reference to the original file.
diff --git a/usr/src/uts/common/fs/ufs/ufs_vnops.c b/usr/src/uts/common/fs/ufs/ufs_vnops.c
index b4fd67b528..7e45078774 100644
--- a/usr/src/uts/common/fs/ufs/ufs_vnops.c
+++ b/usr/src/uts/common/fs/ufs/ufs_vnops.c
@@ -5879,7 +5879,7 @@ ufs_l_pathconf(struct vnode *vp, int cmd, ulong_t *valp, struct cred *cr,
case _PC_SATTR_ENABLED:
case _PC_SATTR_EXISTS:
- *valp = vfs_has_feature(vp->v_vfsp, VFSFT_XVATTR) &&
+ *valp = vfs_has_feature(vp->v_vfsp, VFSFT_SYSATTR_VIEWS) &&
(vp->v_type == VREG || vp->v_type == VDIR);
break;
diff --git a/usr/src/uts/common/fs/vfs.c b/usr/src/uts/common/fs/vfs.c
index a9026650db..c104b6fe71 100644
--- a/usr/src/uts/common/fs/vfs.c
+++ b/usr/src/uts/common/fs/vfs.c
@@ -267,11 +267,11 @@ fsop_vget(vfs_t *vfsp, vnode_t **vpp, fid_t *fidp)
* some extra bytes that only the sysattr layer knows about.
*
* This guarantees that sysattr fids are larger than other fids
- * for this vfs. If the vfs supports sysattrs (implied
- * by VFSFT_XVATTR support), we cannot have a size collision
- * with XATTR_FIDSZ.
+ * for this vfs. If the vfs supports the sysattr view interface
+ * (as indicated by VFSFT_SYSATTR_VIEWS), we cannot have a size
+ * collision with XATTR_FIDSZ.
*/
- if (vfs_has_feature(vfsp, VFSFT_XVATTR) &&
+ if (vfs_has_feature(vfsp, VFSFT_SYSATTR_VIEWS) &&
fidp->fid_len == XATTR_FIDSZ)
return (xattr_dir_vget(vfsp, vpp, fidp));
diff --git a/usr/src/uts/common/fs/xattr.c b/usr/src/uts/common/fs/xattr.c
index 0c0eda87ab..2926a82483 100644
--- a/usr/src/uts/common/fs/xattr.c
+++ b/usr/src/uts/common/fs/xattr.c
@@ -23,8 +23,6 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/param.h>
#include <sys/isa_defs.h>
#include <sys/types.h>
@@ -465,6 +463,9 @@ xattr_file_write(vnode_t *vp, uio_t *uiop, int ioflag, cred_t *cr,
xvattr_t xvattr;
xoptattr_t *xoap = NULL; /* Pointer to optional attributes */
+ if (vfs_has_feature(vp->v_vfsp, VFSFT_XVATTR) == 0)
+ return (EINVAL);
+
/*
* Validate file offset and size.
*/
diff --git a/usr/src/uts/common/fs/zfs/zfs_vfsops.c b/usr/src/uts/common/fs/zfs/zfs_vfsops.c
index eaf2c2f890..06b4dee462 100644
--- a/usr/src/uts/common/fs/zfs/zfs_vfsops.c
+++ b/usr/src/uts/common/fs/zfs/zfs_vfsops.c
@@ -695,6 +695,7 @@ zfs_domount(vfs_t *vfsp, char *osname)
zfsvfs->z_use_fuids = USE_FUIDS(zfsvfs->z_version, zfsvfs->z_os);
if (zfsvfs->z_use_fuids) {
vfs_set_feature(vfsp, VFSFT_XVATTR);
+ vfs_set_feature(vfsp, VFSFT_SYSATTR_VIEWS);
vfs_set_feature(vfsp, VFSFT_ACEMASKONACCESS);
vfs_set_feature(vfsp, VFSFT_ACLONCREATE);
}
diff --git a/usr/src/uts/common/fs/zfs/zfs_vnops.c b/usr/src/uts/common/fs/zfs/zfs_vnops.c
index 509b896cff..b351616cc2 100644
--- a/usr/src/uts/common/fs/zfs/zfs_vnops.c
+++ b/usr/src/uts/common/fs/zfs/zfs_vnops.c
@@ -1969,12 +1969,12 @@ zfs_readdir(vnode_t *vp, uio_t *uio, cred_t *cr, int *eofp,
eodp = (struct edirent *)odp;
/*
- * If this VFS supports system attributes; and we're looking at an
- * extended attribute directory; and we care about normalization
- * conflicts on this vfs; then we must check for normalization
- * conflicts with the sysattr name space.
+ * If this VFS supports the system attribute view interface; and
+ * we're looking at an extended attribute directory; and we care
+ * about normalization conflicts on this vfs; then we must check
+ * for normalization conflicts with the sysattr name space.
*/
- check_sysattrs = vfs_has_feature(vp->v_vfsp, VFSFT_XVATTR) &&
+ check_sysattrs = vfs_has_feature(vp->v_vfsp, VFSFT_SYSATTR_VIEWS) &&
(vp->v_flag & V_XATTRDIR) && zfsvfs->z_norm &&
(flags & V_RDDIR_ENTFLAGS);
@@ -4387,7 +4387,7 @@ zfs_pathconf(vnode_t *vp, int cmd, ulong_t *valp, cred_t *cr,
case _PC_SATTR_ENABLED:
case _PC_SATTR_EXISTS:
- *valp = vfs_has_feature(vp->v_vfsp, VFSFT_XVATTR) &&
+ *valp = vfs_has_feature(vp->v_vfsp, VFSFT_SYSATTR_VIEWS) &&
(vp->v_type == VREG || vp->v_type == VDIR);
return (0);
diff --git a/usr/src/uts/common/smbsrv/smb_ktypes.h b/usr/src/uts/common/smbsrv/smb_ktypes.h
index 8dc737b705..b1203ceaab 100644
--- a/usr/src/uts/common/smbsrv/smb_ktypes.h
+++ b/usr/src/uts/common/smbsrv/smb_ktypes.h
@@ -777,16 +777,6 @@ typedef struct smb_user {
#define SMB_TREE_ACEMASKONACCESS 0x00000800
#define SMB_TREE_NFS_MOUNTED 0x00001000
-/*
- * Currently, the VFSFT_XVATTR feature is defined for file systems
- * which understand the xvattr_t interface as well as for file systems
- * which do not, but which understand the system attribute "view" interface.
- * Since we need to be able to differentiate between these two for UFS,
- * for now we use SMB_TREE_UFS so that we do the right thing.
- */
-
-#define SMB_TREE_UFS 0x00002000
-
typedef enum {
SMB_TREE_STATE_CONNECTED = 0,
SMB_TREE_STATE_DISCONNECTING,
diff --git a/usr/src/uts/common/smbsrv/smb_vops.h b/usr/src/uts/common/smbsrv/smb_vops.h
index 2c82704c7b..3de3605083 100644
--- a/usr/src/uts/common/smbsrv/smb_vops.h
+++ b/usr/src/uts/common/smbsrv/smb_vops.h
@@ -188,8 +188,7 @@ void smb_vop_close(vnode_t *, int, cred_t *);
int smb_vop_read(vnode_t *, uio_t *, cred_t *);
int smb_vop_write(vnode_t *, uio_t *, int, uint32_t *, cred_t *);
int smb_vop_getattr(vnode_t *, vnode_t *, smb_attr_t *, int, cred_t *);
-int smb_vop_setattr(vnode_t *, vnode_t *, smb_attr_t *, int, cred_t *,
- boolean_t);
+int smb_vop_setattr(vnode_t *, vnode_t *, smb_attr_t *, int, cred_t *);
int smb_vop_access(vnode_t *, int, int, vnode_t *, cred_t *);
void smb_vop_eaccess(vnode_t *, int *, int, vnode_t *, cred_t *);
int smb_vop_lookup(vnode_t *, char *, vnode_t **, char *, int, vnode_t *,
diff --git a/usr/src/uts/common/sys/vfs.h b/usr/src/uts/common/sys/vfs.h
index d253e8857c..5d2d43e804 100644
--- a/usr/src/uts/common/sys/vfs.h
+++ b/usr/src/uts/common/sys/vfs.h
@@ -34,8 +34,6 @@
#ifndef _SYS_VFS_H
#define _SYS_VFS_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/types.h>
#include <sys/t_lock.h>
#include <sys/cred.h>
@@ -297,6 +295,7 @@ typedef uint64_t vfs_feature_t;
#define VFSFT_DIRENTFLAGS 0x100000008 /* Supports dirent flags */
#define VFSFT_ACLONCREATE 0x100000010 /* Supports ACL on create */
#define VFSFT_ACEMASKONACCESS 0x100000020 /* Can use ACEMASK for access */
+#define VFSFT_SYSATTR_VIEWS 0x100000040 /* Supports sysattr view i/f */
/*
* Argument structure for mount(2).
diff --git a/usr/src/uts/common/syscall/open.c b/usr/src/uts/common/syscall/open.c
index 1f3d15c88b..a2504bc1c4 100644
--- a/usr/src/uts/common/syscall/open.c
+++ b/usr/src/uts/common/syscall/open.c
@@ -31,8 +31,6 @@
* under license from the Regents of the University of California.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/param.h>
#include <sys/isa_defs.h>
#include <sys/types.h>
@@ -155,7 +153,7 @@ copen(int startfd, char *fname, int filemode, int createmode)
}
if ((startvp->v_vfsp->vfs_flag & VFS_XATTR) != 0 ||
- vfs_has_feature(startvp->v_vfsp, VFSFT_XVATTR)) {
+ vfs_has_feature(startvp->v_vfsp, VFSFT_SYSATTR_VIEWS)) {
error = VOP_LOOKUP(startvp, "", &sdvp, &pn,
(filemode & FXATTRDIROPEN) ? LOOKUP_XATTR :
LOOKUP_XATTR|CREATE_XATTR_DIR, rootvp, CRED(),