diff options
author | Lars Ellenberg <lars.ellenberg@linbit.com> | 2010-12-14 09:13:04 -0500 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2011-03-10 05:43:24 -0500 |
commit | 4b0715f09655e76ca24c35a9e25e7c464c2f7346 (patch) | |
tree | e98706a35b1e18cad09f01d2346d9a1c938c081c /drivers/block/drbd/drbd_nl.c | |
parent | 19f843aa08e2d8f87a09b4c2edc43b00638423a8 (diff) |
drbd: allow petabyte storage on 64bit arch
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_nl.c')
-rw-r--r-- | drivers/block/drbd/drbd_nl.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c index 77dc022eaf6b..a46bc0287e21 100644 --- a/drivers/block/drbd/drbd_nl.c +++ b/drivers/block/drbd/drbd_nl.c | |||
@@ -527,17 +527,19 @@ static void drbd_md_set_sector_offsets(struct drbd_conf *mdev, | |||
527 | } | 527 | } |
528 | } | 528 | } |
529 | 529 | ||
530 | /* input size is expected to be in KB */ | ||
530 | char *ppsize(char *buf, unsigned long long size) | 531 | char *ppsize(char *buf, unsigned long long size) |
531 | { | 532 | { |
532 | /* Needs 9 bytes at max. */ | 533 | /* Needs 9 bytes at max including trailing NUL: |
534 | * -1ULL ==> "16384 EB" */ | ||
533 | static char units[] = { 'K', 'M', 'G', 'T', 'P', 'E' }; | 535 | static char units[] = { 'K', 'M', 'G', 'T', 'P', 'E' }; |
534 | int base = 0; | 536 | int base = 0; |
535 | while (size >= 10000) { | 537 | while (size >= 10000 && base < sizeof(units)-1) { |
536 | /* shift + round */ | 538 | /* shift + round */ |
537 | size = (size >> 10) + !!(size & (1<<9)); | 539 | size = (size >> 10) + !!(size & (1<<9)); |
538 | base++; | 540 | base++; |
539 | } | 541 | } |
540 | sprintf(buf, "%lu %cB", (long)size, units[base]); | 542 | sprintf(buf, "%u %cB", (unsigned)size, units[base]); |
541 | 543 | ||
542 | return buf; | 544 | return buf; |
543 | } | 545 | } |