From 6380c7a035029b121f257905aa66618e3c2e4c1a Mon Sep 17 00:00:00 2001 From: Uri Simchoni Date: Tue, 19 Jan 2016 14:57:16 +0200 Subject: [PATCH] smbd: show correct disk size for different quota and dfree block sizes When file system stats (VFS disk_free_fn) and quota (VFS get_quota_fn) return different block sizes, normalize values before comparing. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11681 Signed-off-by: Uri Simchoni Reviewed-by: Jeremy Allison (cherry picked from commit 67c89715d00abc588239d8220f09cf51a58db05a) --- source3/smbd/dfree.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source3/smbd/dfree.c b/source3/smbd/dfree.c index 62d2ea4..765fbe6 100644 --- a/source3/smbd/dfree.c +++ b/source3/smbd/dfree.c @@ -124,7 +124,14 @@ uint64_t sys_disk_free(connection_struct *conn, const char *path, } if (disk_quotas(conn, path, &bsize_q, &dfree_q, &dsize_q)) { - (*bsize) = bsize_q; + uint64_t min_bsize = MIN(*bsize, bsize_q); + + (*dfree) = (*dfree) * (*bsize) / min_bsize; + (*dsize) = (*dsize) * (*bsize) / min_bsize; + dfree_q = dfree_q * bsize_q / min_bsize; + dsize_q = dsize_q * bsize_q / min_bsize; + + (*bsize) = min_bsize; (*dfree) = MIN(*dfree,dfree_q); (*dsize) = MIN(*dsize,dsize_q); } -- 2.4.3