Module Name:    src
Committed By:   dholland
Date:           Sun Jan 29 06:36:07 UTC 2012

Modified Files:
        src/sys/kern: vfs_quotactl.c vfs_subr.c
        src/sys/miscfs/genfs: layer_extern.h layer_vfsops.c
        src/sys/sys: mount.h quotactl.h
        src/sys/ufs/ufs: ufs_extern.h ufs_quota.c ufs_vfsops.c

Log Message:
Introduce struct vfs_quotactl_args. Use it.

This change uglifies vfs_quotactl some in order to make room for
moving operation-specific but FS-independent logic out of ufs_quota.c.

Note: this change requires a kernel version bump.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/kern/vfs_quotactl.c
cvs rdiff -u -r1.428 -r1.429 src/sys/kern/vfs_subr.c
cvs rdiff -u -r1.31 -r1.32 src/sys/miscfs/genfs/layer_extern.h
cvs rdiff -u -r1.36 -r1.37 src/sys/miscfs/genfs/layer_vfsops.c
cvs rdiff -u -r1.204 -r1.205 src/sys/sys/mount.h
cvs rdiff -u -r1.2 -r1.3 src/sys/sys/quotactl.h
cvs rdiff -u -r1.68 -r1.69 src/sys/ufs/ufs/ufs_extern.h
cvs rdiff -u -r1.71 -r1.72 src/sys/ufs/ufs/ufs_quota.c
cvs rdiff -u -r1.45 -r1.46 src/sys/ufs/ufs/ufs_vfsops.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.4 src/sys/kern/vfs_quotactl.c:1.5
--- src/sys/kern/vfs_quotactl.c:1.4	Sun Jan 29 06:34:57 2012
+++ src/sys/kern/vfs_quotactl.c	Sun Jan 29 06:36:06 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_quotactl.c,v 1.4 2012/01/29 06:34:57 dholland Exp $	*/
+/*	$NetBSD: vfs_quotactl.c,v 1.5 2012/01/29 06:36:06 dholland Exp $	*/
 
 /*
  * Copyright (c) 1991, 1993, 1994
@@ -80,18 +80,115 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_quotactl.c,v 1.4 2012/01/29 06:34:57 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_quotactl.c,v 1.5 2012/01/29 06:36:06 dholland Exp $");
 
 #include <sys/mount.h>
 #include <sys/quotactl.h>
 #include <quota/quotaprop.h>
 
 static int
+vfs_quotactl_getversion(struct mount *mp,
+			prop_dictionary_t cmddict, int q2type,
+			prop_array_t datas)
+{
+	struct vfs_quotactl_args args;
+
+	args.qc_type = QCT_PROPLIB;
+	args.u.proplib.qc_cmddict = cmddict;
+	args.u.proplib.qc_q2type = q2type;
+	args.u.proplib.qc_datas = datas;
+	return VFS_QUOTACTL(mp, QUOTACTL_GETVERSION, &args);
+}
+
+static int
+vfs_quotactl_quotaon(struct mount *mp,
+		     prop_dictionary_t cmddict, int q2type,
+		     prop_array_t datas)
+{
+	struct vfs_quotactl_args args;
+
+	args.qc_type = QCT_PROPLIB;
+	args.u.proplib.qc_cmddict = cmddict;
+	args.u.proplib.qc_q2type = q2type;
+	args.u.proplib.qc_datas = datas;
+	return VFS_QUOTACTL(mp, QUOTACTL_QUOTAON, &args);
+}
+
+static int
+vfs_quotactl_quotaoff(struct mount *mp,
+			prop_dictionary_t cmddict, int q2type,
+			prop_array_t datas)
+{
+	struct vfs_quotactl_args args;
+
+	args.qc_type = QCT_PROPLIB;
+	args.u.proplib.qc_cmddict = cmddict;
+	args.u.proplib.qc_q2type = q2type;
+	args.u.proplib.qc_datas = datas;
+	return VFS_QUOTACTL(mp, QUOTACTL_QUOTAOFF, &args);
+}
+
+static int
+vfs_quotactl_get(struct mount *mp,
+			prop_dictionary_t cmddict, int q2type,
+			prop_array_t datas)
+{
+	struct vfs_quotactl_args args;
+
+	args.qc_type = QCT_PROPLIB;
+	args.u.proplib.qc_cmddict = cmddict;
+	args.u.proplib.qc_q2type = q2type;
+	args.u.proplib.qc_datas = datas;
+	return VFS_QUOTACTL(mp, QUOTACTL_GET, &args);
+}
+
+static int
+vfs_quotactl_set(struct mount *mp,
+			prop_dictionary_t cmddict, int q2type,
+			prop_array_t datas)
+{
+	struct vfs_quotactl_args args;
+
+	args.qc_type = QCT_PROPLIB;
+	args.u.proplib.qc_cmddict = cmddict;
+	args.u.proplib.qc_q2type = q2type;
+	args.u.proplib.qc_datas = datas;
+	return VFS_QUOTACTL(mp, QUOTACTL_SET, &args);
+}
+
+static int
+vfs_quotactl_getall(struct mount *mp,
+			prop_dictionary_t cmddict, int q2type,
+			prop_array_t datas)
+{
+	struct vfs_quotactl_args args;
+
+	args.qc_type = QCT_PROPLIB;
+	args.u.proplib.qc_cmddict = cmddict;
+	args.u.proplib.qc_q2type = q2type;
+	args.u.proplib.qc_datas = datas;
+	return VFS_QUOTACTL(mp, QUOTACTL_GETALL, &args);
+}
+
+static int
+vfs_quotactl_clear(struct mount *mp,
+			prop_dictionary_t cmddict, int q2type,
+			prop_array_t datas)
+{
+	struct vfs_quotactl_args args;
+
+	args.qc_type = QCT_PROPLIB;
+	args.u.proplib.qc_cmddict = cmddict;
+	args.u.proplib.qc_q2type = q2type;
+	args.u.proplib.qc_datas = datas;
+	return VFS_QUOTACTL(mp, QUOTACTL_CLEAR, &args);
+}
+
+static int
 vfs_quotactl_cmd(struct mount *mp, prop_dictionary_t cmddict)
 {
 	int error;
 	const char *cmd, *type;
-	int op;
 	prop_array_t datas;
 	int q2type;
 
@@ -117,28 +214,24 @@ vfs_quotactl_cmd(struct mount *mp, prop_
 	prop_dictionary_remove(cmddict, "data"); /* prepare for return */
 
 	if (strcmp(cmd, "get version") == 0) {
-		op = QUOTACTL_GETVERSION;
+		error = vfs_quotactl_getversion(mp, cmddict, q2type, datas);
 	} else if (strcmp(cmd, "quotaon") == 0) {
-		op = QUOTACTL_QUOTAON;
+		error = vfs_quotactl_quotaon(mp, cmddict, q2type, datas);
 	} else if (strcmp(cmd, "quotaoff") == 0) {
-		op = QUOTACTL_QUOTAOFF;
+		error = vfs_quotactl_quotaoff(mp, cmddict, q2type, datas);
 	} else if (strcmp(cmd, "get") == 0) {
-		op = QUOTACTL_GET;
+		error = vfs_quotactl_get(mp, cmddict, q2type, datas);
 	} else if (strcmp(cmd, "set") == 0) {
-		op = QUOTACTL_SET;
+		error = vfs_quotactl_set(mp, cmddict, q2type, datas);
 	} else if (strcmp(cmd, "getall") == 0) {
-		op = QUOTACTL_GETALL;
+		error = vfs_quotactl_getall(mp, cmddict, q2type, datas);
 	} else if (strcmp(cmd, "clear") == 0) {
-		op = QUOTACTL_CLEAR;
+		error = vfs_quotactl_clear(mp, cmddict, q2type, datas);
 	} else {
 		/* XXX this a bad errno for this case */
 		error = EOPNOTSUPP;
-		goto fail;
 	}
 
-	error = VFS_QUOTACTL(mp, op, cmddict, q2type, datas);
-
- fail:
 	error = (prop_dictionary_set_int8(cmddict, "return",
 	    error) ? 0 : ENOMEM);
 	prop_object_release(datas);

Index: src/sys/kern/vfs_subr.c
diff -u src/sys/kern/vfs_subr.c:1.428 src/sys/kern/vfs_subr.c:1.429
--- src/sys/kern/vfs_subr.c:1.428	Sun Jan 29 06:34:57 2012
+++ src/sys/kern/vfs_subr.c	Sun Jan 29 06:36:06 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_subr.c,v 1.428 2012/01/29 06:34:57 dholland Exp $	*/
+/*	$NetBSD: vfs_subr.c,v 1.429 2012/01/29 06:36:06 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.428 2012/01/29 06:34:57 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_subr.c,v 1.429 2012/01/29 06:36:06 dholland Exp $");
 
 #include "opt_ddb.h"
 #include "opt_compat_netbsd.h"
@@ -1006,15 +1006,14 @@ VFS_ROOT(struct mount *mp, struct vnode 
 }
 
 int
-VFS_QUOTACTL(struct mount *mp, int op, prop_dictionary_t cmddict, int objtype,
-	     prop_array_t datas)
+VFS_QUOTACTL(struct mount *mp, int op, struct vfs_quotactl_args *args)
 {
 	int error;
 
 	if ((mp->mnt_iflag & IMNT_MPSAFE) == 0) {
 		KERNEL_LOCK(1, NULL);
 	}
-	error = (*(mp->mnt_op->vfs_quotactl))(mp, op, cmddict, objtype, datas);
+	error = (*(mp->mnt_op->vfs_quotactl))(mp, op, args);
 	if ((mp->mnt_iflag & IMNT_MPSAFE) == 0) {
 		KERNEL_UNLOCK_ONE(NULL);
 	}

Index: src/sys/miscfs/genfs/layer_extern.h
diff -u src/sys/miscfs/genfs/layer_extern.h:1.31 src/sys/miscfs/genfs/layer_extern.h:1.32
--- src/sys/miscfs/genfs/layer_extern.h:1.31	Sun Jan 29 06:34:58 2012
+++ src/sys/miscfs/genfs/layer_extern.h	Sun Jan 29 06:36:06 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: layer_extern.h,v 1.31 2012/01/29 06:34:58 dholland Exp $	*/
+/*	$NetBSD: layer_extern.h,v 1.32 2012/01/29 06:36:06 dholland Exp $	*/
 
 /*
  * Copyright (c) 1999 National Aeronautics & Space Administration
@@ -88,7 +88,7 @@ struct vnode *layer_node_find(struct mou
 /* VFS routines */
 int	layerfs_start(struct mount *, int);
 int	layerfs_root(struct mount *, struct vnode **);
-int	layerfs_quotactl(struct mount *, int, prop_dictionary_t, int, prop_array_t);
+int	layerfs_quotactl(struct mount *, int, struct vfs_quotactl_args *);
 int	layerfs_statvfs(struct mount *, struct statvfs *);
 int	layerfs_sync(struct mount *, int, struct kauth_cred *);
 int	layerfs_vget(struct mount *, ino_t, struct vnode **);

Index: src/sys/miscfs/genfs/layer_vfsops.c
diff -u src/sys/miscfs/genfs/layer_vfsops.c:1.36 src/sys/miscfs/genfs/layer_vfsops.c:1.37
--- src/sys/miscfs/genfs/layer_vfsops.c:1.36	Sun Jan 29 06:34:58 2012
+++ src/sys/miscfs/genfs/layer_vfsops.c	Sun Jan 29 06:36:06 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: layer_vfsops.c,v 1.36 2012/01/29 06:34:58 dholland Exp $	*/
+/*	$NetBSD: layer_vfsops.c,v 1.37 2012/01/29 06:36:06 dholland Exp $	*/
 
 /*
  * Copyright (c) 1999 National Aeronautics & Space Administration
@@ -74,7 +74,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: layer_vfsops.c,v 1.36 2012/01/29 06:34:58 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: layer_vfsops.c,v 1.37 2012/01/29 06:36:06 dholland Exp $");
 
 #include <sys/param.h>
 #include <sys/sysctl.h>
@@ -141,12 +141,10 @@ layerfs_root(struct mount *mp, struct vn
 }
 
 int
-layerfs_quotactl(struct mount *mp, int op, prop_dictionary_t dict, int objtype,
-		 prop_array_t datas)
+layerfs_quotactl(struct mount *mp, int op, struct vfs_quotactl_args *args)
 {
 
-	return VFS_QUOTACTL(MOUNTTOLAYERMOUNT(mp)->layerm_vfs, op, dict,
-			    objtype, datas);
+	return VFS_QUOTACTL(MOUNTTOLAYERMOUNT(mp)->layerm_vfs, op, args);
 }
 
 int

Index: src/sys/sys/mount.h
diff -u src/sys/sys/mount.h:1.204 src/sys/sys/mount.h:1.205
--- src/sys/sys/mount.h:1.204	Sun Jan 29 06:34:57 2012
+++ src/sys/sys/mount.h	Sun Jan 29 06:36:06 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: mount.h,v 1.204 2012/01/29 06:34:57 dholland Exp $	*/
+/*	$NetBSD: mount.h,v 1.205 2012/01/29 06:36:06 dholland Exp $	*/
 
 /*
  * Copyright (c) 1989, 1991, 1993
@@ -192,6 +192,7 @@ struct mount {
 
 #if defined(_KERNEL)
 #include <prop/proplib.h>
+struct vfs_quotactl_args;
 #if __STDC__
 struct nameidata;
 #endif
@@ -208,8 +209,7 @@ struct vfsops {
 	int	(*vfs_start)	(struct mount *, int);
 	int	(*vfs_unmount)	(struct mount *, int);
 	int	(*vfs_root)	(struct mount *, struct vnode **);
-	int	(*vfs_quotactl)	(struct mount *, int, prop_dictionary_t, int,
-				    prop_array_t);
+	int	(*vfs_quotactl)	(struct mount *, int, struct vfs_quotactl_args *);
 	int	(*vfs_statvfs)	(struct mount *, struct statvfs *);
 	int	(*vfs_sync)	(struct mount *, int, struct kauth_cred *);
 	int	(*vfs_vget)	(struct mount *, ino_t, struct vnode **);
@@ -244,7 +244,7 @@ int	VFS_MOUNT(struct mount *, const char
 int	VFS_START(struct mount *, int);
 int	VFS_UNMOUNT(struct mount *, int);
 int	VFS_ROOT(struct mount *, struct vnode **);
-int	VFS_QUOTACTL(struct mount *, int, prop_dictionary_t, int, prop_array_t);
+int	VFS_QUOTACTL(struct mount *, int, struct vfs_quotactl_args *);
 int	VFS_STATVFS(struct mount *, struct statvfs *);
 int	VFS_SYNC(struct mount *, int, struct kauth_cred *);
 int	VFS_FHTOVP(struct mount *, struct fid *, struct vnode **);
@@ -270,7 +270,7 @@ int	fsname##_mount(struct mount *, const
 int	fsname##_start(struct mount *, int);				\
 int	fsname##_unmount(struct mount *, int);				\
 int	fsname##_root(struct mount *, struct vnode **);			\
-int	fsname##_quotactl(struct mount *, int, prop_dictionary_t, int, prop_array_t);	\
+int	fsname##_quotactl(struct mount *, int, struct vfs_quotactl_args *);	\
 int	fsname##_statvfs(struct mount *, struct statvfs *);		\
 int	fsname##_sync(struct mount *, int, struct kauth_cred *);	\
 int	fsname##_vget(struct mount *, ino_t, struct vnode **);		\

Index: src/sys/sys/quotactl.h
diff -u src/sys/sys/quotactl.h:1.2 src/sys/sys/quotactl.h:1.3
--- src/sys/sys/quotactl.h:1.2	Sun Jan 29 06:34:57 2012
+++ src/sys/sys/quotactl.h	Sun Jan 29 06:36:06 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: quotactl.h,v 1.2 2012/01/29 06:34:57 dholland Exp $	*/
+/*	$NetBSD: quotactl.h,v 1.3 2012/01/29 06:36:06 dholland Exp $	*/
 /*-
  * Copyright (c) 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -46,4 +46,19 @@
 #define QUOTACTL_GETALL		5
 #define QUOTACTL_CLEAR		6
 
+/* Argument encoding. */
+enum vfs_quotactl_argtypes {
+	QCT_PROPLIB,	/* getversion, quotaon/off, get, set, getall, clear */
+};
+struct vfs_quotactl_args {
+	enum vfs_quotactl_argtypes qc_type;
+	union {
+		struct {
+			prop_dictionary_t qc_cmddict;
+			int qc_q2type;
+			prop_array_t qc_datas;
+		} proplib;
+	} u;
+};
+
 #endif /* _SYS_QUOTACTL_H_ */

Index: src/sys/ufs/ufs/ufs_extern.h
diff -u src/sys/ufs/ufs/ufs_extern.h:1.68 src/sys/ufs/ufs/ufs_extern.h:1.69
--- src/sys/ufs/ufs/ufs_extern.h:1.68	Sun Jan 29 06:34:58 2012
+++ src/sys/ufs/ufs/ufs_extern.h	Sun Jan 29 06:36:07 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_extern.h,v 1.68 2012/01/29 06:34:58 dholland Exp $	*/
+/*	$NetBSD: ufs_extern.h,v 1.69 2012/01/29 06:36:07 dholland Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993, 1994
@@ -149,7 +149,7 @@ void	ufsquota_free(struct inode *);
 int	chkdq(struct inode *, int64_t, kauth_cred_t, int);
 int	chkiq(struct inode *, int32_t, kauth_cred_t, int);
 int	quota_handle_cmd(struct mount *, struct lwp *, int,
-			 prop_dictionary_t, int, prop_array_t);
+			 struct vfs_quotactl_args *);
 
 int	qsync(struct mount *);
 
@@ -165,7 +165,7 @@ void	ufs_reinit(void);
 void	ufs_done(void);
 int	ufs_start(struct mount *, int);
 int	ufs_root(struct mount *, struct vnode **);
-int	ufs_quotactl(struct mount *, int, prop_dictionary_t, int, prop_array_t);
+int	ufs_quotactl(struct mount *, int, struct vfs_quotactl_args *);
 int	ufs_fhtovp(struct mount *, struct ufid *, struct vnode **);
 
 /* ufs_vnops.c */

Index: src/sys/ufs/ufs/ufs_quota.c
diff -u src/sys/ufs/ufs/ufs_quota.c:1.71 src/sys/ufs/ufs/ufs_quota.c:1.72
--- src/sys/ufs/ufs/ufs_quota.c:1.71	Sun Jan 29 06:34:58 2012
+++ src/sys/ufs/ufs/ufs_quota.c	Sun Jan 29 06:36:07 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_quota.c,v 1.71 2012/01/29 06:34:58 dholland Exp $	*/
+/*	$NetBSD: ufs_quota.c,v 1.72 2012/01/29 06:36:07 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.71 2012/01/29 06:34:58 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_quota.c,v 1.72 2012/01/29 06:36:07 dholland Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_quota.h"
@@ -72,19 +72,20 @@ static pool_cache_t dquot_cache;
 
 
 static int quota_handle_cmd_get_version(struct mount *, struct lwp *,
-    prop_dictionary_t, prop_array_t);
+    struct vfs_quotactl_args *args);
 static int quota_handle_cmd_get(struct mount *, struct lwp *,
-    prop_dictionary_t, int, prop_array_t);
+    struct vfs_quotactl_args *args);
 static int quota_handle_cmd_set(struct mount *, struct lwp *,
-    prop_dictionary_t, int, prop_array_t);
+    struct vfs_quotactl_args *args);
 static int quota_handle_cmd_getall(struct mount *, struct lwp *,
-    prop_dictionary_t, int, prop_array_t);
+    struct vfs_quotactl_args *args);
 static int quota_handle_cmd_clear(struct mount *, struct lwp *,
-    prop_dictionary_t, int, prop_array_t);
+    struct vfs_quotactl_args *args);
 static int quota_handle_cmd_quotaon(struct mount *, struct lwp *, 
-    prop_dictionary_t, int, prop_array_t);
+    struct vfs_quotactl_args *args);
 static int quota_handle_cmd_quotaoff(struct mount *, struct lwp *, 
-    prop_dictionary_t, int, prop_array_t);
+    struct vfs_quotactl_args *args);
+
 /*
  * Initialize the quota fields of an inode.
  */
@@ -154,35 +155,31 @@ chkiq(struct inode *ip, int32_t change, 
 
 int
 quota_handle_cmd(struct mount *mp, struct lwp *l, int op,
-		 prop_dictionary_t cmddict, int q2type, prop_array_t datas)
+		 struct vfs_quotactl_args *args)
 {
 	int error = 0;
 
-	KASSERT(prop_object_type(datas) == PROP_TYPE_ARRAY);
-
 	switch (op) {
 	    case QUOTACTL_GETVERSION:
-		error = quota_handle_cmd_get_version(mp, l, cmddict, datas);
+		error = quota_handle_cmd_get_version(mp, l, args);
 		break;
 	    case QUOTACTL_QUOTAON:
-		error = quota_handle_cmd_quotaon(mp, l, cmddict,
-		    q2type, datas);
+		error = quota_handle_cmd_quotaon(mp, l, args);
 		break;
 	    case QUOTACTL_QUOTAOFF:
-		error = quota_handle_cmd_quotaoff(mp, l, cmddict,
-		    q2type, datas);
+		error = quota_handle_cmd_quotaoff(mp, l, args);
 		break;
 	    case QUOTACTL_GET:
-		error = quota_handle_cmd_get(mp, l, cmddict, q2type, datas);
+		error = quota_handle_cmd_get(mp, l, args);
 		break;
 	    case QUOTACTL_SET:
-		error = quota_handle_cmd_set(mp, l, cmddict, q2type, datas);
+		error = quota_handle_cmd_set(mp, l, args);
 		break;
 	    case QUOTACTL_GETALL:
-		error = quota_handle_cmd_getall(mp, l, cmddict, q2type, datas);
+		error = quota_handle_cmd_getall(mp, l, args);
 		break;
 	    case QUOTACTL_CLEAR:
-		error = quota_handle_cmd_clear(mp, l, cmddict, q2type, datas);
+		error = quota_handle_cmd_clear(mp, l, args);
 		break;
 	    default:
 		panic("Invalid quotactl operation %d\n", op);
@@ -193,12 +190,22 @@ quota_handle_cmd(struct mount *mp, struc
 
 static int 
 quota_handle_cmd_get_version(struct mount *mp, struct lwp *l, 
-    prop_dictionary_t cmddict, prop_array_t datas)
+    struct vfs_quotactl_args *args)
 {
 	struct ufsmount *ump = VFSTOUFS(mp);
 	prop_array_t replies;
 	prop_dictionary_t data;
 	int error = 0;
+	prop_dictionary_t cmddict;
+	prop_array_t datas;
+
+	KASSERT(args->qc_type == QCT_PROPLIB);
+	cmddict = args->u.proplib.qc_cmddict;
+	/* qc_q2type not used */
+	datas = args->u.proplib.qc_datas;
+
+	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
+	KASSERT(prop_object_type(datas) == PROP_TYPE_ARRAY);
 
 	if ((ump->um_flags & (UFS_QUOTA|UFS_QUOTA2)) == 0)
 		return EOPNOTSUPP;
@@ -249,7 +256,7 @@ quota_get_auth(struct mount *mp, struct 
 
 static int 
 quota_handle_cmd_get(struct mount *mp, struct lwp *l, 
-    prop_dictionary_t cmddict, int type, prop_array_t datas)
+    struct vfs_quotactl_args *args)
 {
 	prop_array_t replies;
 	prop_object_iterator_t iter;
@@ -258,6 +265,17 @@ quota_handle_cmd_get(struct mount *mp, s
 	struct ufsmount *ump = VFSTOUFS(mp);
 	int error, defaultq = 0;
 	const char *idstr;
+	prop_dictionary_t cmddict;
+	int q2type;
+	prop_array_t datas;
+
+	KASSERT(args->qc_type == QCT_PROPLIB);
+	cmddict = args->u.proplib.qc_cmddict;
+	q2type = args->u.proplib.qc_q2type;
+	datas = args->u.proplib.qc_datas;
+
+	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
+	KASSERT(prop_object_type(datas) == PROP_TYPE_ARRAY);
 
 	if ((ump->um_flags & (UFS_QUOTA|UFS_QUOTA2)) == 0)
 		return EOPNOTSUPP;
@@ -292,13 +310,13 @@ quota_handle_cmd_get(struct mount *mp, s
 			goto err;
 #ifdef QUOTA
 		if (ump->um_flags & UFS_QUOTA)
-			error = quota1_handle_cmd_get(ump, type, id, defaultq,
+			error = quota1_handle_cmd_get(ump, q2type, id, defaultq,
 			    replies);
 		else
 #endif
 #ifdef QUOTA2
 		if (ump->um_flags & UFS_QUOTA2) {
-			error = quota2_handle_cmd_get(ump, type, id, defaultq,
+			error = quota2_handle_cmd_get(ump, q2type, id, defaultq,
 			    replies);
 		} else
 #endif
@@ -324,7 +342,7 @@ err:
 
 static int 
 quota_handle_cmd_set(struct mount *mp, struct lwp *l, 
-    prop_dictionary_t cmddict, int type, prop_array_t datas)
+    struct vfs_quotactl_args *args)
 {
 	prop_array_t replies;
 	prop_object_iterator_t iter;
@@ -333,6 +351,17 @@ quota_handle_cmd_set(struct mount *mp, s
 	struct ufsmount *ump = VFSTOUFS(mp);
 	int error, defaultq = 0;
 	const char *idstr;
+	prop_dictionary_t cmddict;
+	int q2type;
+	prop_array_t datas;
+
+	KASSERT(args->qc_type == QCT_PROPLIB);
+	cmddict = args->u.proplib.qc_cmddict;
+	q2type = args->u.proplib.qc_q2type;
+	datas = args->u.proplib.qc_datas;
+
+	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
+	KASSERT(prop_object_type(datas) == PROP_TYPE_ARRAY);
 
 	if ((ump->um_flags & (UFS_QUOTA|UFS_QUOTA2)) == 0)
 		return EOPNOTSUPP;
@@ -364,13 +393,13 @@ quota_handle_cmd_set(struct mount *mp, s
 			goto err;
 #ifdef QUOTA
 		if (ump->um_flags & UFS_QUOTA)
-			error = quota1_handle_cmd_set(ump, type, id, defaultq,
+			error = quota1_handle_cmd_set(ump, q2type, id, defaultq,
 			    data);
 		else
 #endif
 #ifdef QUOTA2
 		if (ump->um_flags & UFS_QUOTA2) {
-			error = quota2_handle_cmd_set(ump, type, id, defaultq,
+			error = quota2_handle_cmd_set(ump, q2type, id, defaultq,
 			    data);
 		} else
 #endif
@@ -394,7 +423,7 @@ err:
 
 static int 
 quota_handle_cmd_clear(struct mount *mp, struct lwp *l, 
-    prop_dictionary_t cmddict, int type, prop_array_t datas)
+    struct vfs_quotactl_args *args)
 {
 	prop_array_t replies;
 	prop_object_iterator_t iter;
@@ -403,6 +432,17 @@ quota_handle_cmd_clear(struct mount *mp,
 	struct ufsmount *ump = VFSTOUFS(mp);
 	int error, defaultq = 0;
 	const char *idstr;
+	prop_dictionary_t cmddict;
+	int q2type;
+	prop_array_t datas;
+
+	KASSERT(args->qc_type == QCT_PROPLIB);
+	cmddict = args->u.proplib.qc_cmddict;
+	q2type = args->u.proplib.qc_q2type;
+	datas = args->u.proplib.qc_datas;
+
+	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
+	KASSERT(prop_object_type(datas) == PROP_TYPE_ARRAY);
 
 	if ((ump->um_flags & UFS_QUOTA2) == 0)
 		return EOPNOTSUPP;
@@ -434,7 +474,7 @@ quota_handle_cmd_clear(struct mount *mp,
 			goto err;
 #ifdef QUOTA2
 		if (ump->um_flags & UFS_QUOTA2) {
-			error = quota2_handle_cmd_clear(ump, type, id, defaultq,
+			error = quota2_handle_cmd_clear(ump, q2type, id, defaultq,
 			    data);
 		} else
 #endif
@@ -458,11 +498,22 @@ err:
 
 static int 
 quota_handle_cmd_getall(struct mount *mp, struct lwp *l, 
-    prop_dictionary_t cmddict, int type, prop_array_t datas)
+    struct vfs_quotactl_args *args)
 {
 	prop_array_t replies;
 	struct ufsmount *ump = VFSTOUFS(mp);
 	int error;
+	prop_dictionary_t cmddict;
+	int q2type;
+	prop_array_t datas;
+
+	KASSERT(args->qc_type == QCT_PROPLIB);
+	cmddict = args->u.proplib.qc_cmddict;
+	q2type = args->u.proplib.qc_q2type;
+	datas = args->u.proplib.qc_datas;
+
+	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
+	KASSERT(prop_object_type(datas) == PROP_TYPE_ARRAY);
 
 	if ((ump->um_flags & UFS_QUOTA2) == 0)
 		return EOPNOTSUPP;
@@ -478,7 +529,7 @@ quota_handle_cmd_getall(struct mount *mp
 
 #ifdef QUOTA2
 	if (ump->um_flags & UFS_QUOTA2) {
-		error = quota2_handle_cmd_getall(ump, type, replies);
+		error = quota2_handle_cmd_getall(ump, q2type, replies);
 	} else
 #endif
 		panic("quota_handle_cmd_getall: no support ?");
@@ -492,12 +543,23 @@ quota_handle_cmd_getall(struct mount *mp
 
 static int 
 quota_handle_cmd_quotaon(struct mount *mp, struct lwp *l, 
-    prop_dictionary_t cmddict, int type, prop_array_t datas)
+    struct vfs_quotactl_args *args)
 {
 	prop_dictionary_t data;
 	struct ufsmount *ump = VFSTOUFS(mp);
 	int error;
 	const char *qfile;
+	prop_dictionary_t cmddict;
+	int q2type;
+	prop_array_t datas;
+
+	KASSERT(args->qc_type == QCT_PROPLIB);
+	cmddict = args->u.proplib.qc_cmddict;
+	q2type = args->u.proplib.qc_q2type;
+	datas = args->u.proplib.qc_datas;
+
+	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
+	KASSERT(prop_object_type(datas) == PROP_TYPE_ARRAY);
 
 	if ((ump->um_flags & UFS_QUOTA2) != 0)
 		return EBUSY;
@@ -518,7 +580,7 @@ quota_handle_cmd_quotaon(struct mount *m
 		return error;
 	}
 #ifdef QUOTA
-	error = quota1_handle_cmd_quotaon(l, ump, type, qfile);
+	error = quota1_handle_cmd_quotaon(l, ump, q2type, qfile);
 #else
 	error = EOPNOTSUPP;
 #endif
@@ -528,10 +590,21 @@ quota_handle_cmd_quotaon(struct mount *m
 
 static int 
 quota_handle_cmd_quotaoff(struct mount *mp, struct lwp *l, 
-    prop_dictionary_t cmddict, int type, prop_array_t datas)
+    struct vfs_quotactl_args *args)
 {
 	struct ufsmount *ump = VFSTOUFS(mp);
 	int error;
+	prop_dictionary_t cmddict;
+	int q2type;
+	prop_array_t datas;
+
+	KASSERT(args->qc_type == QCT_PROPLIB);
+	cmddict = args->u.proplib.qc_cmddict;
+	q2type = args->u.proplib.qc_q2type;
+	datas = args->u.proplib.qc_datas;
+
+	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
+	KASSERT(prop_object_type(datas) == PROP_TYPE_ARRAY);
 
 	if ((ump->um_flags & UFS_QUOTA2) != 0)
 		return EOPNOTSUPP;
@@ -545,7 +618,7 @@ quota_handle_cmd_quotaoff(struct mount *
 		return error;
 	}
 #ifdef QUOTA
-	error = quota1_handle_cmd_quotaoff(l, ump, type);
+	error = quota1_handle_cmd_quotaoff(l, ump, q2type);
 #else
 	error = EOPNOTSUPP;
 #endif

Index: src/sys/ufs/ufs/ufs_vfsops.c
diff -u src/sys/ufs/ufs/ufs_vfsops.c:1.45 src/sys/ufs/ufs/ufs_vfsops.c:1.46
--- src/sys/ufs/ufs/ufs_vfsops.c:1.45	Sun Jan 29 06:34:58 2012
+++ src/sys/ufs/ufs/ufs_vfsops.c	Sun Jan 29 06:36:07 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_vfsops.c,v 1.45 2012/01/29 06:34:58 dholland Exp $	*/
+/*	$NetBSD: ufs_vfsops.c,v 1.46 2012/01/29 06:36:07 dholland Exp $	*/
 
 /*
  * Copyright (c) 1991, 1993, 1994
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_vfsops.c,v 1.45 2012/01/29 06:34:58 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_vfsops.c,v 1.46 2012/01/29 06:36:07 dholland Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -55,6 +55,7 @@ __KERNEL_RCSID(0, "$NetBSD: ufs_vfsops.c
 
 #include <miscfs/specfs/specdev.h>
 
+#include <sys/quotactl.h>
 #include <ufs/ufs/quota.h>
 #include <ufs/ufs/inode.h>
 #include <ufs/ufs/ufsmount.h>
@@ -100,8 +101,7 @@ ufs_root(struct mount *mp, struct vnode 
  * Do operations associated with quotas
  */
 int
-ufs_quotactl(struct mount *mp, int op, prop_dictionary_t cmddict, int q2type,
-	     prop_array_t datas)
+ufs_quotactl(struct mount *mp, int op, struct vfs_quotactl_args *args)
 {
 	struct lwp *l = curlwp;
 
@@ -112,9 +112,7 @@ ufs_quotactl(struct mount *mp, int op, p
 	(void) l;
 	return (EOPNOTSUPP);
 #else
-	int  error;
-
-	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
+	int error;
 
 	/* Mark the mount busy, as we're passing it to kauth(9). */
 	error = vfs_busy(mp, NULL);
@@ -123,7 +121,7 @@ ufs_quotactl(struct mount *mp, int op, p
 	}
 	mutex_enter(&mp->mnt_updating);
 
-	error = quota_handle_cmd(mp, l, op, cmddict, q2type, datas);
+	error = quota_handle_cmd(mp, l, op, args);
 
 	mutex_exit(&mp->mnt_updating);
 	vfs_unbusy(mp, false, NULL);

Reply via email to