Module Name:    src
Committed By:   dholland
Date:           Sun Jan 29 06:39:37 UTC 2012

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

Log Message:
Move what was second-layer proplib frobbing for QUOTACTL_GET to
FS-independent code. (Step 3 of probably 5 for QUOTACTL_GET.)

Note: this change requires a kernel version bump.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/kern/vfs_quotactl.c
cvs rdiff -u -r1.5 -r1.6 src/sys/sys/quotactl.h
cvs rdiff -u -r1.75 -r1.76 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.7 src/sys/kern/vfs_quotactl.c:1.8
--- src/sys/kern/vfs_quotactl.c:1.7	Sun Jan 29 06:37:30 2012
+++ src/sys/kern/vfs_quotactl.c	Sun Jan 29 06:39:36 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_quotactl.c,v 1.7 2012/01/29 06:37:30 dholland Exp $	*/
+/*	$NetBSD: vfs_quotactl.c,v 1.8 2012/01/29 06:39:36 dholland Exp $	*/
 
 /*
  * Copyright (c) 1991, 1993, 1994
@@ -80,9 +80,10 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_quotactl.c,v 1.7 2012/01/29 06:37:30 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_quotactl.c,v 1.8 2012/01/29 06:39:36 dholland Exp $");
 
 #include <sys/mount.h>
+#include <sys/quota.h>
 #include <sys/quotactl.h>
 #include <quota/quotaprop.h>
 
@@ -166,17 +167,45 @@ vfs_quotactl_quotaoff(struct mount *mp,
 }
 
 static int
+vfs_quotactl_get_addreply(id_t id,
+			  int defaultq,
+			  const struct quotaval *blocks,
+			  const struct quotaval *files,
+			  prop_array_t replies)
+{
+	prop_dictionary_t dict;
+
+	/* XXX illegal casts */
+	uint64_t *valuesp[QUOTA_NLIMITS];
+	valuesp[QUOTA_LIMIT_BLOCK] = (void *)(intptr_t)&blocks->qv_hardlimit;
+	valuesp[QUOTA_LIMIT_FILE] =  (void *)(intptr_t)&files->qv_hardlimit;
+
+	dict = quota64toprop(id, defaultq, valuesp,
+	    ufs_quota_entry_names, UFS_QUOTA_NENTRIES,
+	    ufs_quota_limit_names, QUOTA_NLIMITS);
+	if (dict == NULL)
+		return ENOMEM;
+	if (!prop_array_add_and_rel(replies, dict)) {
+		prop_object_release(dict);
+		return ENOMEM;
+	}
+
+	return 0;
+}
+
+static int
 vfs_quotactl_get(struct mount *mp,
 			prop_dictionary_t cmddict, int q2type,
 			prop_array_t datas)
 {
 	prop_object_iterator_t iter;
 	prop_dictionary_t data;
+	prop_array_t replies;
 	uint32_t id;
 	int defaultq;
 	const char *idstr;
-	prop_array_t replies;
 	struct vfs_quotactl_args args;
+	struct quotaval blocks, files;
 	int error;
 
 	KASSERT(prop_object_type(cmddict) == PROP_TYPE_DICTIONARY);
@@ -212,7 +241,8 @@ vfs_quotactl_get(struct mount *mp,
 		args.u.get.qc_q2type = q2type;
 		args.u.get.qc_id = id;
 		args.u.get.qc_defaultq = defaultq;
-		args.u.get.qc_replies = replies;
+		args.u.get.qc_blocks_ret = &blocks;
+		args.u.get.qc_files_ret = &files;
 		error = VFS_QUOTACTL(mp, QUOTACTL_GET, &args);
 		if (error == EPERM) {
 			/* XXX does this make sense? */
@@ -223,6 +253,10 @@ vfs_quotactl_get(struct mount *mp,
 		} else if (error) {
 			goto fail;
 		}
+
+		error = vfs_quotactl_get_addreply(id, defaultq,
+						  &blocks, &files,
+						  replies);
 	}
 
 	prop_object_iterator_release(iter);

Index: src/sys/sys/quotactl.h
diff -u src/sys/sys/quotactl.h:1.5 src/sys/sys/quotactl.h:1.6
--- src/sys/sys/quotactl.h:1.5	Sun Jan 29 06:37:30 2012
+++ src/sys/sys/quotactl.h	Sun Jan 29 06:39:36 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: quotactl.h,v 1.5 2012/01/29 06:37:30 dholland Exp $	*/
+/*	$NetBSD: quotactl.h,v 1.6 2012/01/29 06:39:36 dholland Exp $	*/
 /*-
  * Copyright (c) 2011 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -67,7 +67,8 @@ struct vfs_quotactl_args {
 			int qc_q2type;
 			id_t qc_id;
 			int qc_defaultq;
-			prop_array_t qc_replies;
+			struct quotaval *qc_blocks_ret;
+			struct quotaval *qc_files_ret;
 		} get;
 	} u;
 };

Index: src/sys/ufs/ufs/ufs_quota.c
diff -u src/sys/ufs/ufs/ufs_quota.c:1.75 src/sys/ufs/ufs/ufs_quota.c:1.76
--- src/sys/ufs/ufs/ufs_quota.c:1.75	Sun Jan 29 06:38:24 2012
+++ src/sys/ufs/ufs/ufs_quota.c	Sun Jan 29 06:39:37 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_quota.c,v 1.75 2012/01/29 06:38:24 dholland Exp $	*/
+/*	$NetBSD: ufs_quota.c,v 1.76 2012/01/29 06:39:37 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.75 2012/01/29 06:38:24 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_quota.c,v 1.76 2012/01/29 06:39:37 dholland Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_quota.h"
@@ -226,33 +226,6 @@ quota_get_auth(struct mount *mp, struct 
 	    KAUTH_REQ_SYSTEM_FS_QUOTA_GET, mp, KAUTH_ARG(id), NULL);
 }
 
-static int
-quota_fill_cmd_get_reply(id_t id,
-			 int defaultq,
-			 const struct quotaval *blocks,
-			 const struct quotaval *files,
-			 prop_array_t replies)
-{
-	prop_dictionary_t dict;
-
-	/* XXX illegal casts */
-	uint64_t *valuesp[QUOTA_NLIMITS];
-	valuesp[QUOTA_LIMIT_BLOCK] = (void *)(intptr_t)&blocks->qv_hardlimit;
-	valuesp[QUOTA_LIMIT_FILE] =  (void *)(intptr_t)&files->qv_hardlimit;
-
-	dict = quota64toprop(id, defaultq, valuesp,
-	    ufs_quota_entry_names, UFS_QUOTA_NENTRIES,
-	    ufs_quota_limit_names, QUOTA_NLIMITS);
-	if (dict == NULL)
-		return ENOMEM;
-	if (!prop_array_add_and_rel(replies, dict)) {
-		prop_object_release(dict);
-		return ENOMEM;
-	}
-
-	return 0;
-}
-
 static int 
 quota_handle_cmd_get(struct mount *mp, struct lwp *l, 
     struct vfs_quotactl_args *args)
@@ -262,14 +235,14 @@ quota_handle_cmd_get(struct mount *mp, s
 	id_t id;
 	int q2type;
 	int defaultq;
-	prop_array_t replies;
-	struct quotaval blocks, files;
+	struct quotaval *blocks, *files;
 
 	KASSERT(args->qc_type == QCT_GET);
 	id = args->u.get.qc_id;
 	q2type = args->u.get.qc_q2type;
 	defaultq = args->u.get.qc_defaultq;
-	replies = args->u.get.qc_replies;
+	blocks = args->u.get.qc_blocks_ret;
+	files = args->u.get.qc_files_ret;
 
 	if ((ump->um_flags & (UFS_QUOTA|UFS_QUOTA2)) == 0)
 		return EOPNOTSUPP;
@@ -281,23 +254,19 @@ quota_handle_cmd_get(struct mount *mp, s
 #ifdef QUOTA
 		if (ump->um_flags & UFS_QUOTA) {
 			error = quota1_handle_cmd_get(ump, q2type, id, defaultq,
-			    &blocks, &files);
+			    blocks, files);
 		} else
 #endif
 #ifdef QUOTA2
 		if (ump->um_flags & UFS_QUOTA2) {
 			error = quota2_handle_cmd_get(ump, q2type, id, defaultq,
-			    &blocks, &files);
+			    blocks, files);
 		} else
 #endif
 			panic("quota_handle_cmd_get: no support ?");
 		
 		if (error != 0)
 			return error;
-
-		error = quota_fill_cmd_get_reply(id, defaultq,
-						 &blocks, &files,
-						 replies);
 	}
 
 	return error;

Reply via email to