summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2012-06-12 16:03:35 +0200
committerJan Kara <jack@suse.cz>2012-06-12 16:03:35 +0200
commit2ef32f7d7edf4cd3295a8a7828229487e37ea0f3 (patch)
tree24795281ff15ac01a550cf54be954a1693d06d88
parent6ba6546dd167297cb9ed69d0257ee245b0faea47 (diff)
Fix computation of dynamic rpc block size
The computation counted with block limits as being in bytes. But they are in quota blocks. Fix the math. Signed-off-by: Jan Kara <jack@suse.cz>
-rw-r--r--rquota_server.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/rquota_server.c b/rquota_server.c
index bb270e6..bf66e4d 100644
--- a/rquota_server.c
+++ b/rquota_server.c
@@ -103,7 +103,7 @@ static int find_block_shift(qsize_t hard, qsize_t soft, qsize_t cur)
value = soft;
if (value < cur)
value = cur;
- value >>= 32 + QUOTABLOCK_BITS;
+ value >>= 32;
for (shift = QUOTABLOCK_BITS; value; shift++)
value >>= 1;
@@ -116,13 +116,13 @@ static inline void servutil2netdqblk(struct rquota *n, struct util_dqblk *u)
int shift;
shift = find_block_shift(u->dqb_bhardlimit, u->dqb_bsoftlimit,
- u->dqb_curspace);
+ toqb(u->dqb_curspace));
n->rq_bsize = 1 << shift;
- n->rq_bhardlimit = (u->dqb_bhardlimit << QUOTABLOCK_BITS) >> shift;
- n->rq_bsoftlimit = (u->dqb_bsoftlimit << QUOTABLOCK_BITS) >> shift;
+ n->rq_bhardlimit = u->dqb_bhardlimit >> (shift - QUOTABLOCK_BITS);
+ n->rq_bsoftlimit = u->dqb_bsoftlimit >> (shift - QUOTABLOCK_BITS);
n->rq_fhardlimit = u->dqb_ihardlimit;
n->rq_fsoftlimit = u->dqb_isoftlimit;
- n->rq_curblocks = (u->dqb_curspace + n->rq_bsize - 1) >> shift;
+ n->rq_curblocks = toqb(u->dqb_curspace) >> (shift - QUOTABLOCK_BITS);
n->rq_curfiles = u->dqb_curinodes;
time(&now);