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)