svn commit: r203264 -
stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Edward Tomasz Napierala
trasz at FreeBSD.org
Sun Jan 31 02:11:14 UTC 2010
Author: trasz
Date: Sun Jan 31 02:11:14 2010
New Revision: 203264
URL: http://svn.freebsd.org/changeset/base/203264
Log:
MFC r196949:
Enable NFSv4 ACL support in ZFS.
MFC r197435:
In VOP_SETACL(9) and VOP_GETACL(9), specifying wrong ACL type should result
in EINVAL, not EOPNOTSUPP.
Modified:
stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/xen/xenpci/ (props changed)
Modified: stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Sun Jan 31 01:30:51 2010 (r203263)
+++ stable/8/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Sun Jan 31 02:11:14 2010 (r203264)
@@ -3851,7 +3851,15 @@ zfs_pathconf(vnode_t *vp, int cmd, ulong
#endif
case _PC_ACL_EXTENDED:
- *valp = 0; /* TODO */
+ *valp = 0;
+ return (0);
+
+ case _PC_ACL_NFS4:
+ *valp = 1;
+ return (0);
+
+ case _PC_ACL_PATH_MAX:
+ *valp = ACL_MAX_ENTRIES;
return (0);
case _PC_MIN_HOLE_SIZE:
@@ -4471,6 +4479,26 @@ zfs_freebsd_pathconf(ap)
return (error);
}
+static int
+zfs_freebsd_fifo_pathconf(ap)
+ struct vop_pathconf_args /* {
+ struct vnode *a_vp;
+ int a_name;
+ register_t *a_retval;
+ } */ *ap;
+{
+
+ switch (ap->a_name) {
+ case _PC_ACL_EXTENDED:
+ case _PC_ACL_NFS4:
+ case _PC_ACL_PATH_MAX:
+ case _PC_MAC_PRESENT:
+ return (zfs_freebsd_pathconf(ap));
+ default:
+ return (fifo_specops.vop_pathconf(ap));
+ }
+}
+
/*
* FreeBSD's extended attributes namespace defines file name prefix for ZFS'
* extended attribute name:
@@ -4865,7 +4893,7 @@ zfs_freebsd_getacl(ap)
vsecattr_t vsecattr;
if (ap->a_type != ACL_TYPE_NFS4)
- return (EOPNOTSUPP);
+ return (EINVAL);
vsecattr.vsa_mask = VSA_ACE | VSA_ACECNT;
if (error = zfs_getsecattr(ap->a_vp, &vsecattr, 0, ap->a_cred, NULL))
@@ -4894,13 +4922,13 @@ zfs_freebsd_setacl(ap)
aclent_t *aaclp;
if (ap->a_type != ACL_TYPE_NFS4)
- return (EOPNOTSUPP);
+ return (EINVAL);
if (ap->a_aclp->acl_cnt < 1 || ap->a_aclp->acl_cnt > MAX_ACL_ENTRIES)
return (EINVAL);
/*
- * With NFS4 ACLs, chmod(2) may need to add additional entries,
+ * With NFSv4 ACLs, chmod(2) may need to add additional entries,
* splitting every entry into two and appending "canonical six"
* entries at the end. Don't allow for setting an ACL that would
* cause chmod(2) to run out of ACL entries.
@@ -4974,11 +5002,9 @@ struct vop_vector zfs_vnodeops = {
.vop_deleteextattr = zfs_deleteextattr,
.vop_setextattr = zfs_setextattr,
.vop_listextattr = zfs_listextattr,
-#ifdef notyet
.vop_getacl = zfs_freebsd_getacl,
.vop_setacl = zfs_freebsd_setacl,
.vop_aclcheck = zfs_freebsd_aclcheck,
-#endif
};
struct vop_vector zfs_fifoops = {
@@ -4991,10 +5017,9 @@ struct vop_vector zfs_fifoops = {
.vop_reclaim = zfs_freebsd_reclaim,
.vop_setattr = zfs_freebsd_setattr,
.vop_write = VOP_PANIC,
+ .vop_pathconf = zfs_freebsd_fifo_pathconf,
.vop_fid = zfs_freebsd_fid,
-#ifdef notyet
.vop_getacl = zfs_freebsd_getacl,
.vop_setacl = zfs_freebsd_setacl,
.vop_aclcheck = zfs_freebsd_aclcheck,
-#endif
};
More information about the svn-src-stable
mailing list