Module Name:    src
Committed By:   dholland
Date:           Sun Jan 29 07:13:43 UTC 2012

Modified Files:
        src/sys/kern: vfs_quotactl.c vfs_subr.c
        src/sys/sys: quotactl.h
        src/sys/ufs/ufs: ufs_quota.c

Log Message:
Tidy up the VFS_QUOTACTL interface. Renumber the command codes in a
logical order (as opposed to the previous order, which accumulated
arbitrarily), remove the separate codes for argument encoding as
there's now a 1-1 mapping between ops and argument substructures,
and assert in VFS_QUOTACTL() itself that the op in the args structure
matches the op passed directly.

This change requires a kernel version bump.


To generate a diff of this commit:
cvs rdiff -u -r1.33 -r1.34 src/sys/kern/vfs_quotactl.c
cvs rdiff -u -r1.429 -r1.430 src/sys/kern/vfs_subr.c
cvs rdiff -u -r1.29 -r1.30 src/sys/sys/quotactl.h
cvs rdiff -u -r1.101 -r1.102 src/sys/ufs/ufs/ufs_quota.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/vfs_quotactl.c
diff -u src/sys/kern/vfs_quotactl.c:1.33 src/sys/kern/vfs_quotactl.c:1.34
--- src/sys/kern/vfs_quotactl.c:1.33	Sun Jan 29 07:12:40 2012
+++ src/sys/kern/vfs_quotactl.c	Sun Jan 29 07:13:42 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_quotactl.c,v 1.33 2012/01/29 07:12:40 dholland Exp $	*/
+/*	$NetBSD: vfs_quotactl.c,v 1.34 2012/01/29 07:13:42 dholland Exp $	*/
 
 /*
  * Copyright (c) 1991, 1993, 1994
@@ -80,7 +80,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_quotactl.c,v 1.33 2012/01/29 07:12:40 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_quotactl.c,v 1.34 2012/01/29 07:13:42 dholland Exp $");
 
 #include <sys/malloc.h> /* XXX: temporary */
 #include <sys/mount.h>
@@ -103,7 +103,7 @@ vfs_quotactl_getversion(struct mount *mp
 	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
 	KASSERT(prop_object_type(datas) == PROP_TYPE_ARRAY);
 
-	args.qc_type = QCT_STAT;
+	args.qc_op = QUOTACTL_STAT;
 	args.u.stat.qc_ret = &stat;
 	error = VFS_QUOTACTL(mp, QUOTACTL_STAT, &args);
 	if (error) {
@@ -173,7 +173,7 @@ vfs_quotactl_quotaon(struct mount *mp,
 	    &qfile))
 		return EINVAL;
 
-	args.qc_type = QCT_QUOTAON;
+	args.qc_op = QUOTACTL_QUOTAON;
 	args.u.quotaon.qc_idtype = q2type;
 	args.u.quotaon.qc_quotafile = qfile;
 	return VFS_QUOTACTL(mp, QUOTACTL_QUOTAON, &args);
@@ -192,7 +192,7 @@ vfs_quotactl_quotaoff(struct mount *mp,
 	if (prop_array_count(datas) != 0)
 		return EINVAL;
 
-	args.qc_type = QCT_QUOTAOFF;
+	args.qc_op = QUOTACTL_QUOTAOFF;
 	args.u.quotaoff.qc_idtype = q2type;
 	return VFS_QUOTACTL(mp, QUOTACTL_QUOTAOFF, &args);
 }
@@ -280,7 +280,7 @@ vfs_quotactl_get(struct mount *mp,
 
 		qk.qk_objtype = QUOTA_OBJTYPE_BLOCKS;
 
-		args.qc_type = QCT_GET;
+		args.qc_op = QUOTACTL_GET;
 		args.u.get.qc_key = &qk;
 		args.u.get.qc_ret = &blocks;
 		error = VFS_QUOTACTL(mp, QUOTACTL_GET, &args);
@@ -296,7 +296,7 @@ vfs_quotactl_get(struct mount *mp,
 
 		qk.qk_objtype = QUOTA_OBJTYPE_FILES;
 
-		args.qc_type = QCT_GET;
+		args.qc_op = QUOTACTL_GET;
 		args.u.get.qc_key = &qk;
 		args.u.get.qc_ret = &files;
 		error = VFS_QUOTACTL(mp, QUOTACTL_GET, &args);
@@ -435,7 +435,7 @@ vfs_quotactl_put(struct mount *mp,
 		qk.qk_id = defaultq ? QUOTA_DEFAULTID : id;
 		qk.qk_objtype = QUOTA_OBJTYPE_BLOCKS;
 
-		args.qc_type = QCT_PUT;
+		args.qc_op = QUOTACTL_PUT;
 		args.u.put.qc_key = &qk;
 		args.u.put.qc_val = &blocks;
 		error = VFS_QUOTACTL(mp, QUOTACTL_PUT, &args);
@@ -447,7 +447,7 @@ vfs_quotactl_put(struct mount *mp,
 		qk.qk_id = defaultq ? QUOTA_DEFAULTID : id;
 		qk.qk_objtype = QUOTA_OBJTYPE_FILES;
 
-		args.qc_type = QCT_PUT;
+		args.qc_op = QUOTACTL_PUT;
 		args.u.put.qc_key = &qk;
 		args.u.put.qc_val = &files;
 		error = VFS_QUOTACTL(mp, QUOTACTL_PUT, &args);
@@ -572,7 +572,7 @@ vfs_quotactl_getall(struct mount *mp,
 
 	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
 
-	args.qc_type = QCT_CURSOROPEN;
+	args.qc_op = QUOTACTL_CURSOROPEN;
 	args.u.cursoropen.qc_cursor = &cursor;
 	error = VFS_QUOTACTL(mp, QUOTACTL_CURSOROPEN, &args);
 	if (error) {
@@ -584,7 +584,7 @@ vfs_quotactl_getall(struct mount *mp,
 
 	skipidtype = (q2type == QUOTA_IDTYPE_USER ?
 		      QUOTA_IDTYPE_GROUP : QUOTA_IDTYPE_USER);
-	args.qc_type = QCT_CURSORSKIPIDTYPE;
+	args.qc_op = QUOTACTL_CURSORSKIPIDTYPE;
 	args.u.cursorskipidtype.qc_cursor = &cursor;
 	args.u.cursorskipidtype.qc_idtype = skipidtype;
 	error = VFS_QUOTACTL(mp, QUOTACTL_CURSORSKIPIDTYPE, &args);
@@ -602,7 +602,7 @@ vfs_quotactl_getall(struct mount *mp,
 	atzero = 0;
 
 	while (1) {
-		args.qc_type = QCT_CURSORATEND;
+		args.qc_op = QUOTACTL_CURSORATEND;
 		args.u.cursoratend.qc_cursor = &cursor;
 		args.u.cursoratend.qc_ret = &atend;
 		error = VFS_QUOTACTL(mp, QUOTACTL_CURSORATEND, &args);
@@ -613,7 +613,7 @@ vfs_quotactl_getall(struct mount *mp,
 			break;
 		}
 
-		args.qc_type = QCT_CURSORGET;
+		args.qc_op = QUOTACTL_CURSORGET;
 		args.u.cursorget.qc_cursor = &cursor;
 		args.u.cursorget.qc_keys = keys;
 		args.u.cursorget.qc_vals = vals;
@@ -626,14 +626,14 @@ vfs_quotactl_getall(struct mount *mp,
 			 * transaction abort, start over
 			 */
 
-			args.qc_type = QCT_CURSORREWIND;
+			args.qc_op = QUOTACTL_CURSORREWIND;
 			args.u.cursorrewind.qc_cursor = &cursor;
 			error = VFS_QUOTACTL(mp, QUOTACTL_CURSORREWIND, &args);
 			if (error) {
 				goto err;
 			}
 
-			args.qc_type = QCT_CURSORSKIPIDTYPE;
+			args.qc_op = QUOTACTL_CURSORSKIPIDTYPE;
 			args.u.cursorskipidtype.qc_cursor = &cursor;
 			args.u.cursorskipidtype.qc_idtype = skipidtype;
 			error = VFS_QUOTACTL(mp, QUOTACTL_CURSORSKIPIDTYPE,
@@ -729,7 +729,7 @@ vfs_quotactl_getall(struct mount *mp,
 		prop_object_release(replies);
 	}
 
-	args.qc_type = QCT_CURSORCLOSE;
+	args.qc_op = QUOTACTL_CURSORCLOSE;
 	args.u.cursorclose.qc_cursor = &cursor;
 	error2 = VFS_QUOTACTL(mp, QUOTACTL_CURSORCLOSE, &args);
 
@@ -785,7 +785,7 @@ vfs_quotactl_clear(struct mount *mp,
 		qk.qk_id = defaultq ? QUOTA_DEFAULTID : id;
 		qk.qk_objtype = QUOTA_OBJTYPE_BLOCKS;
 
-		args.qc_type = QCT_DELETE;
+		args.qc_op = QUOTACTL_DELETE;
 		args.u.delete.qc_key = &qk;
 		error = VFS_QUOTACTL(mp, QUOTACTL_DELETE, &args);
 		if (error) {
@@ -796,7 +796,7 @@ vfs_quotactl_clear(struct mount *mp,
 		qk.qk_id = defaultq ? QUOTA_DEFAULTID : id;
 		qk.qk_objtype = QUOTA_OBJTYPE_FILES;
 
-		args.qc_type = QCT_DELETE;
+		args.qc_op = QUOTACTL_DELETE;
 		args.u.delete.qc_key = &qk;
 		error = VFS_QUOTACTL(mp, QUOTACTL_DELETE, &args);
 		if (error) {

Index: src/sys/kern/vfs_subr.c
diff -u src/sys/kern/vfs_subr.c:1.429 src/sys/kern/vfs_subr.c:1.430
--- src/sys/kern/vfs_subr.c:1.429	Sun Jan 29 06:36:06 2012
+++ src/sys/kern/vfs_subr.c	Sun Jan 29 07:13:42 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_subr.c,v 1.429 2012/01/29 06:36:06 dholland Exp $	*/
+/*	$NetBSD: vfs_subr.c,v 1.430 2012/01/29 07:13:42 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998, 2004, 2005, 2007, 2008 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.429 2012/01/29 06:36:06 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.430 2012/01/29 07:13:42 dholland Exp $");
 
 #include "opt_ddb.h"
 #include "opt_compat_netbsd.h"
@@ -90,6 +90,7 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v
 #include <sys/syscallargs.h>
 #include <sys/kauth.h>
 #include <sys/module.h>
+#include <sys/quotactl.h> /* XXX temporary */
 
 #include <miscfs/genfs/genfs.h>
 #include <miscfs/syncfs/syncfs.h>
@@ -1010,6 +1011,8 @@ VFS_QUOTACTL(struct mount *mp, int op, s
 {
 	int error;
 
+	KASSERT(op == args->qc_op);
+
 	if ((mp->mnt_iflag & IMNT_MPSAFE) == 0) {
 		KERNEL_LOCK(1, NULL);
 	}

Index: src/sys/sys/quotactl.h
diff -u src/sys/sys/quotactl.h:1.29 src/sys/sys/quotactl.h:1.30
--- src/sys/sys/quotactl.h:1.29	Sun Jan 29 07:12:41 2012
+++ src/sys/sys/quotactl.h	Sun Jan 29 07:13:43 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: quotactl.h,v 1.29 2012/01/29 07:12:41 dholland Exp $	*/
+/*	$NetBSD: quotactl.h,v 1.30 2012/01/29 07:13:43 dholland Exp $	*/
 /*-
  * Copyright (c) 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -73,43 +73,23 @@ struct quotakcursor {
 
 /* Command codes. */
 #define QUOTACTL_STAT		0
-#define QUOTACTL_QUOTAON	1
-#define QUOTACTL_QUOTAOFF	2
-#define QUOTACTL_GET		3
-#define QUOTACTL_PUT		4
-#define QUOTACTL_CURSORGET	5
-#define QUOTACTL_DELETE		6
-#define QUOTACTL_CURSOROPEN	7
-#define QUOTACTL_CURSORCLOSE	8
-#define QUOTACTL_CURSORSKIPIDTYPE 9
-#define QUOTACTL_CURSORATEND	10
-#define QUOTACTL_CURSORREWIND	11
+#define QUOTACTL_GET		1
+#define QUOTACTL_PUT		2
+#define QUOTACTL_DELETE		3
+#define QUOTACTL_CURSOROPEN	4
+#define QUOTACTL_CURSORCLOSE	5
+#define QUOTACTL_CURSORSKIPIDTYPE 6
+#define QUOTACTL_CURSORGET	7
+#define QUOTACTL_CURSORATEND	8
+#define QUOTACTL_CURSORREWIND	9
+#define QUOTACTL_QUOTAON	10
+#define QUOTACTL_QUOTAOFF	11
 
 /* Argument encoding. */
-enum vfs_quotactl_argtypes {
-	QCT_PROPLIB,	/* unused */
-	QCT_STAT,	/* stat */
-	QCT_GET,	/* get */
-	QCT_PUT,	/* put */
-	QCT_DELETE,	/* delete */
-	QCT_CURSOROPEN,	/* open cursor */
-	QCT_CURSORCLOSE,/* close cursor */
-	QCT_CURSORGET,	/* get from cursor */
-	QCT_CURSORSKIPIDTYPE, /* iteration hint */
-	QCT_CURSORATEND,/* test cursor */
-	QCT_CURSORREWIND,/* reset cursor */
-	QCT_QUOTAON,	/* quotaon */
-	QCT_QUOTAOFF,	/* quotaoff */
-};
 struct vfs_quotactl_args {
-	enum vfs_quotactl_argtypes qc_type;
+	unsigned qc_op;
 	union {
 		struct {
-			prop_dictionary_t qc_cmddict;
-			int qc_q2type;
-			prop_array_t qc_datas;
-		} proplib;
-		struct {
 			struct quotastat *qc_ret;
 		} stat;
 		struct {

Index: src/sys/ufs/ufs/ufs_quota.c
diff -u src/sys/ufs/ufs/ufs_quota.c:1.101 src/sys/ufs/ufs/ufs_quota.c:1.102
--- src/sys/ufs/ufs/ufs_quota.c:1.101	Sun Jan 29 07:12:41 2012
+++ src/sys/ufs/ufs/ufs_quota.c	Sun Jan 29 07:13:43 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_quota.c,v 1.101 2012/01/29 07:12:41 dholland Exp $	*/
+/*	$NetBSD: ufs_quota.c,v 1.102 2012/01/29 07:13:43 dholland Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1990, 1993, 1995
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_quota.c,v 1.101 2012/01/29 07:12:41 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_quota.c,v 1.102 2012/01/29 07:13:43 dholland Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_quota.h"
@@ -220,7 +220,7 @@ quota_handle_cmd_stat(struct mount *mp, 
 	struct ufsmount *ump = VFSTOUFS(mp);
 	struct quotastat *ret;
 
-	KASSERT(args->qc_type == QCT_STAT);
+	KASSERT(args->qc_op == QUOTACTL_STAT);
 	ret = args->u.stat.qc_ret;
 
 	if ((ump->um_flags & (UFS_QUOTA|UFS_QUOTA2)) == 0)
@@ -270,7 +270,7 @@ quota_handle_cmd_get(struct mount *mp, s
 	const struct quotakey *qk;
 	struct quotaval *ret;
 
-	KASSERT(args->qc_type == QCT_GET);
+	KASSERT(args->qc_op == QUOTACTL_GET);
 	qk = args->u.get.qc_key;
 	ret = args->u.get.qc_ret;
 
@@ -308,7 +308,7 @@ quota_handle_cmd_put(struct mount *mp, s
 	id_t kauth_id;
 	int error;
 
-	KASSERT(args->qc_type == QCT_PUT);
+	KASSERT(args->qc_op == QUOTACTL_PUT);
 	qk = args->u.put.qc_key;
 	qv = args->u.put.qc_val;
 
@@ -355,7 +355,7 @@ quota_handle_cmd_delete(struct mount *mp
 	id_t kauth_id;
 	int error;
 
-	KASSERT(args->qc_type == QCT_DELETE);
+	KASSERT(args->qc_op == QUOTACTL_DELETE);
 	qk = args->u.delete.qc_key;
 
 	kauth_id = qk->qk_id;
@@ -401,7 +401,7 @@ quota_handle_cmd_cursorget(struct mount 
 	unsigned *ret;
 	int error;
 
-	KASSERT(args->qc_type == QCT_CURSORGET);
+	KASSERT(args->qc_op == QUOTACTL_CURSORGET);
 	cursor = args->u.cursorget.qc_cursor;
 	keys = args->u.cursorget.qc_keys;
 	vals = args->u.cursorget.qc_vals;
@@ -435,7 +435,7 @@ quota_handle_cmd_cursoropen(struct mount
 	struct quotakcursor *cursor;
 	int error;
 
-	KASSERT(args->qc_type == QCT_CURSOROPEN);
+	KASSERT(args->qc_op == QUOTACTL_CURSOROPEN);
 	cursor = args->u.cursoropen.qc_cursor;
 
 	error = kauth_authorize_system(l->l_cred, KAUTH_SYSTEM_FS_QUOTA,
@@ -461,7 +461,7 @@ quota_handle_cmd_cursorclose(struct moun
 	struct quotakcursor *cursor;
 	int error;
 
-	KASSERT(args->qc_type == QCT_CURSORCLOSE);
+	KASSERT(args->qc_op == QUOTACTL_CURSORCLOSE);
 	cursor = args->u.cursorclose.qc_cursor;
 
 	error = kauth_authorize_system(l->l_cred, KAUTH_SYSTEM_FS_QUOTA,
@@ -488,7 +488,7 @@ quota_handle_cmd_cursorskipidtype(struct
 	int idtype;
 	int error;
 
-	KASSERT(args->qc_type == QCT_CURSORSKIPIDTYPE);
+	KASSERT(args->qc_op == QUOTACTL_CURSORSKIPIDTYPE);
 	cursor = args->u.cursorskipidtype.qc_cursor;
 	idtype = args->u.cursorskipidtype.qc_idtype;
 
@@ -511,7 +511,7 @@ quota_handle_cmd_cursoratend(struct moun
 	int *ret;
 	int error;
 
-	KASSERT(args->qc_type == QCT_CURSORATEND);
+	KASSERT(args->qc_op == QUOTACTL_CURSORATEND);
 	cursor = args->u.cursoratend.qc_cursor;
 	ret = args->u.cursoratend.qc_ret;
 
@@ -533,7 +533,7 @@ quota_handle_cmd_cursorrewind(struct mou
 	struct quotakcursor *cursor;
 	int error;
 
-	KASSERT(args->qc_type == QCT_CURSORREWIND);
+	KASSERT(args->qc_op == QUOTACTL_CURSORREWIND);
 	cursor = args->u.cursorrewind.qc_cursor;
 
 #ifdef QUOTA2
@@ -555,7 +555,7 @@ quota_handle_cmd_quotaon(struct mount *m
 	const char *qfile;
 	int error;
 
-	KASSERT(args->qc_type == QCT_QUOTAON);
+	KASSERT(args->qc_op == QUOTACTL_QUOTAON);
 	idtype = args->u.quotaon.qc_idtype;
 	qfile = args->u.quotaon.qc_quotafile;
 
@@ -584,7 +584,7 @@ quota_handle_cmd_quotaoff(struct mount *
 	int idtype;
 	int error;
 
-	KASSERT(args->qc_type == QCT_QUOTAOFF);
+	KASSERT(args->qc_op == QUOTACTL_QUOTAOFF);
 	idtype = args->u.quotaoff.qc_idtype;
 
 	if ((ump->um_flags & UFS_QUOTA2) != 0)

Reply via email to