dovecot-2.0: quota-fs/rquota: If soft limit is zero, fallback to...

dovecot at dovecot.org dovecot at dovecot.org
Mon Jul 5 15:10:10 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/ec62342fa241
changeset: 11730:ec62342fa241
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Jul 05 13:10:07 2010 +0100
description:
quota-fs/rquota: If soft limit is zero, fallback to returning hard limits.

diffstat:

 src/plugins/quota/quota-fs.c |  53 ++++++++++++++------------
 1 files changed, 29 insertions(+), 24 deletions(-)

diffs (77 lines):

diff -r 4f4096096364 -r ec62342fa241 src/plugins/quota/quota-fs.c
--- a/src/plugins/quota/quota-fs.c	Mon Jul 05 13:01:10 2010 +0100
+++ b/src/plugins/quota/quota-fs.c	Mon Jul 05 13:10:07 2010 +0100
@@ -321,6 +321,31 @@
 }
 
 #ifdef HAVE_RQUOTA
+static void
+rquota_get_result(const rquota *rq, bool bytes,
+		  uint64_t *value_r, uint64_t *limit_r)
+{
+	/* use soft limits if they exist, fallback to hard limits */
+	if (bytes) {
+		/* convert the results from blocks to bytes */
+		*value_r = (uint64_t)rq->rq_curblocks *
+			(uint64_t)rq->rq_bsize;
+		if (rq->rq_bsoftlimit != 0) {
+			*limit_r = (uint64_t)rq->rq_bsoftlimit *
+				(uint64_t)rq->rq_bsize;
+		} else {
+			*limit_r = (uint64_t)rq->rq_bhardlimit *
+				(uint64_t)rq->rq_bsize;
+		}
+	} else {
+		*value_r = rq->rq_curfiles;
+		if (rq->rq_fsoftlimit != 0)
+			*limit_r = rq->rq_fsoftlimit;
+		else
+			*limit_r = rq->rq_fhardlimit;
+	}
+}
+
 static int do_rquota_user(struct fs_quota_root *root, bool bytes,
 			  uint64_t *value_r, uint64_t *limit_r)
 {
@@ -390,18 +415,8 @@
 
 	switch (result.status) {
 	case Q_OK: {
-		/* convert the results from blocks to bytes */
-		const rquota *rq = &result.getquota_rslt_u.gqr_rquota;
-
-		if (bytes) {
-			*value_r = (uint64_t)rq->rq_curblocks *
-				(uint64_t)rq->rq_bsize;
-			*limit_r = (uint64_t)rq->rq_bsoftlimit *
-				(uint64_t)rq->rq_bsize;
-		} else {
-			*value_r = rq->rq_curfiles;
-			*limit_r = rq->rq_fsoftlimit;
-		}
+		rquota_get_result(&result.getquota_rslt_u.gqr_rquota, bytes,
+				  value_r, limit_r);
 		if (root->root.quota->set->debug) {
 			i_debug("quota-fs: uid=%s, value=%llu, limit=%llu",
 				dec2str(root->uid),
@@ -490,18 +505,8 @@
 
 	switch (result.status) {
 	case Q_OK: {
-		/* convert the results from blocks to bytes */
-		const rquota *rq = &result.getquota_rslt_u.gqr_rquota;
-
-		if (bytes) {
-			*value_r = (uint64_t)rq->rq_curblocks *
-				(uint64_t)rq->rq_bsize;
-			*limit_r = (uint64_t)rq->rq_bsoftlimit *
-				(uint64_t)rq->rq_bsize;
-		} else {
-			*value_r = rq->rq_curfiles;
-			*limit_r = rq->rq_fsoftlimit;
-		}
+		rquota_get_result(&result.getquota_rslt_u.gqr_rquota, bytes,
+				  value_r, limit_r);
 		if (root->root.quota->set->debug) {
 			i_debug("quota-fs: gid=%s, value=%llu, limit=%llu",
 				dec2str(root->gid),


More information about the dovecot-cvs mailing list