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)