Josef Bacik
2013-Oct-22 14:10 UTC
[PATCH] Btrfs-progs: make pretty_sizes take u64 instead of a double
This got changed to a double but all the callers still use a u64, which causes us to segfault sometimes because of some weird C voodoo that I had to have explained to me. Apparently because we''re using a double the compiler will use the floating point registers to hold our argument which ends up not being aligned properly if you don''t actually give it a double so it will cause problems for other things, in our case it was screwing up str_bytes so it was larger than the actual size of the str. This patch fixes the segfault. Thanks, Signed-off-by: Josef Bacik <jbacik@fusionio.com> --- utils.c | 2 +- utils.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/utils.c b/utils.c index 69ae21f..f8bc94f 100644 --- a/utils.c +++ b/utils.c @@ -1190,7 +1190,7 @@ out: } static char *size_strs[] = { "", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB"}; -int pretty_size_snprintf(double size, char *str, size_t str_bytes) +int pretty_size_snprintf(u64 size, char *str, size_t str_bytes) { int num_divs = 0; float fraction; diff --git a/utils.h b/utils.h index 7a74826..32e0542 100644 --- a/utils.h +++ b/utils.h @@ -49,7 +49,7 @@ int check_mounted_where(int fd, const char *file, char *where, int size, int btrfs_device_already_in_root(struct btrfs_root *root, int fd, int super_offset); -int pretty_size_snprintf(double size, char *str, size_t str_bytes); +int pretty_size_snprintf(u64 size, char *str, size_t str_bytes); #define pretty_size(size) \ ({ \ static __thread char _str[24]; \ -- 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html