Mercurial > dovecot > core-2.2
changeset 11730:ec62342fa241 HEAD
quota-fs/rquota: If soft limit is zero, fallback to returning hard limits.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 05 Jul 2010 13:10:07 +0100 |
parents | 4f4096096364 |
children | d464e23e357c |
files | src/plugins/quota/quota-fs.c |
diffstat | 1 files changed, 29 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- 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),