summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUri Simchoni <uri@samba.org>2016-01-19 14:57:16 +0200
committerKarolin Seeger <kseeger@samba.org>2016-02-03 11:50:25 +0100
commit7da9c659d3ca41de13c995872c32cb52ee4f27f7 (patch)
tree2193b3daa6627102a392e5046589d03f39b91098
parent11336502f3e588dc014beff7a88f9d1ad6c52a9f (diff)
downloadsamba-7da9c659d3ca41de13c995872c32cb52ee4f27f7.tar.gz
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 <uri@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> (cherry picked from commit 67c89715d00abc588239d8220f09cf51a58db05a)
-rw-r--r--source3/smbd/dfree.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/source3/smbd/dfree.c b/source3/smbd/dfree.c
index 62d2ea4791a..765fbe6ed13 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);
}