PERFORCE change 160011 for review

Edward Tomasz Napierala trasz at FreeBSD.org
Mon Mar 30 08:12:12 PDT 2009


http://perforce.freebsd.org/chv.cgi?CH=160011

Change 160011 by trasz at trasz_victim7 on 2009/03/30 15:11:35

	Simplify vfs_unixify_accmode() usage.  Completely untested.

Affected files ...

.. //depot/projects/soc2008/trasz_nfs4acl/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#16 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/kern/subr_acl_posix1e.c#12 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/kern/vfs_subr.c#28 edit
.. //depot/projects/soc2008/trasz_nfs4acl/sys/sys/vnode.h#24 edit

Differences ...

==== //depot/projects/soc2008/trasz_nfs4acl/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#16 (text+ko) ====

@@ -3969,7 +3969,8 @@
 	int error;
 	accmode_t accmode = ap->a_accmode;
 
-	if (vfs_unixify_accmode(&accmode, &error))
+	error = vfs_unixify_accmode(&accmode);
+	if (error != 0)
 		return (error);
 
 	/*

==== //depot/projects/soc2008/trasz_nfs4acl/sys/kern/subr_acl_posix1e.c#12 (text+ko) ====

@@ -71,7 +71,8 @@
 	if (privused != NULL)
 		*privused = 0;
 
-	if (vfs_unixify_accmode(&accmode, &error))
+	error = vfs_unixify_accmode(&accmode);
+	if (error != 0)
 		return (error);
 
 	/*

==== //depot/projects/soc2008/trasz_nfs4acl/sys/kern/vfs_subr.c#28 (text+ko) ====

@@ -3548,7 +3548,8 @@
 
 	dac_granted = 0;
 
-	if (vfs_unixify_accmode(&accmode, &error))
+	error = vfs_unixify_accmode(&accmode);
+	if (error != 0)
 		return (error);
 
 	/* Check the owner. */
@@ -4278,26 +4279,28 @@
  * reducing it into standard unix access bits - VEXEC, VREAD, VWRITE
  * and VADMIN.
  *
- * This routine is supposed to be called from the beginning of vaccess
+ * This routine is supposed to be called at the beginning of vaccess
  * implementations that don't know anything about granularity.  If it
- * returns 1, then the caller is supposed to return whatever this routine
- * puts into variable pointed to by "error".
+ * returns 0, then the caller is supposed to continue with the usual
+ * access checks using 'accmode' as modified by this routine.  If it
+ * returns nonzero value, the caller is supposed to return that value
+ * as errno.
+ *
+ * Note that after this routine runs, accmode may be zero.
  */
 int
-vfs_unixify_accmode(accmode_t *accmode, int *error)
+vfs_unixify_accmode(accmode_t *accmode)
 {
 	/*
 	 * Unix does not provide any explicit "deny" access rules.
 	 */
 	if (*accmode & VEXPLICIT_DENY) {
-		*error = 0;
-		return (1);
+		*accmode = 0;
+		return (0);
 	}
 
-	if (*accmode & (VDELETE_CHILD | VDELETE)) {
-		*error = EPERM;
-		return (1);
-	}
+	if (*accmode & (VDELETE_CHILD | VDELETE))
+		return (EPERM);
 
 	if (*accmode & VADMIN_PERMS) {
 		*accmode &= ~VADMIN_PERMS;
@@ -4306,11 +4309,5 @@
 
 	*accmode &= ~(VSTAT_PERMS | VSYNCHRONIZE);
 
-	if (*accmode == 0) {
-		*error = 0;
-		return (1);
-	}
-
 	return (0);
 }
-

==== //depot/projects/soc2008/trasz_nfs4acl/sys/sys/vnode.h#24 (text+ko) ====

@@ -625,7 +625,7 @@
 int	vaccess_acl_nfs4(enum vtype type, uid_t file_uid,
 	    gid_t file_gid, struct acl *acl, accmode_t accmode,
 	    struct ucred *cred, int *privused);
-int	vfs_unixify_accmode(accmode_t *accmode, int *error);
+int	vfs_unixify_accmode(accmode_t *accmode);
 void	vattr_null(struct vattr *vap);
 int	vcount(struct vnode *vp);
 void	vdrop(struct vnode *);


More information about the p4-projects mailing list