forked from Proxmox/proxmox
78bf05a458
We currently calculate the size of a datastore using `statfs64`, which returns the number of blocks in the fs and the two block sizes: fragemented block size(f_frsize) and block size (f_bsize). To calculate eg the total space in a datastore we use total_blocks * f_bsize, which is not always correct. `f_frsize` is the minimum unit of allocation on the filesystem (in bytes) and in 99% of the cases equal to `f_bsize`, but in some cases it differs. For example some filesystems allow smaller blocks for small files, in case f_frsize < f_bsize. In that case, f_frsize * total_blocks returns (mostly) the correct result (ceph also did some weird stuff, which is now being fixed though [0][1]). `statvfs` also documents this as the recommended way ('fsblkcnt_t f_blocks; /* Size of fs in f_frsize units */')[2]. This patch aligns the the behavior with the libc utilities (also used by `df`) [3]. Motivation: [4] (Forum post) [0]: https://tracker.ceph.com/issues/3793 [1]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=92a49fb0f79f3300e6e50ddf56238e70678e4202 [2]: https://www.man7.org/linux/man-pages/man3/statvfs.3.html [3]: https://git.savannah.gnu.org/cgit/gnulib.git/tree/lib/fsusage.c#n147 [4]: https://forum.proxmox.com/threads/pbs-3-1-2-wrong-datastore-information-sshfs.139875/#post-626959 Signed-off-by: Gabriel Goller <g.goller@proxmox.com> |
||
---|---|---|
.. | ||
debian | ||
src | ||
tests | ||
Cargo.toml |