smbd: show correct disk size for different quota and dfree block sizes
authorUri Simchoni <uri@samba.org>
Tue, 19 Jan 2016 12:57:16 +0000 (14:57 +0200)
committerJeremy Allison <jra@samba.org>
Wed, 27 Jan 2016 21:02:08 +0000 (22:02 +0100)
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>
source3/smbd/dfree.c

index 62d2ea4791abacfb4d76f9bd91ca12778bda107a..765fbe6ed139ac691f6d98902d81a3dee947ce52 100644 (file)
@@ -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);
        }