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)
downloadlinuxquota-2ef32f7d7edf4cd3295a8a7828229487e37ea0f3.tar.gz
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);