mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git
synced 2025-01-23 20:23:20 +08:00
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> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
This commit is contained in:
parent
d33b2a4842
commit
cee267d8c8
2
utils.c
2
utils.c
@ -1213,7 +1213,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;
|
||||
|
2
utils.h
2
utils.h
@ -57,7 +57,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]; \
|
||||
|
Loading…
Reference in New Issue
Block a user