aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_nl.c
diff options
context:
space:
mode:
authorLars Ellenberg <lars.ellenberg@linbit.com>2010-12-14 09:13:04 -0500
committerPhilipp Reisner <philipp.reisner@linbit.com>2011-03-10 05:43:24 -0500
commit4b0715f09655e76ca24c35a9e25e7c464c2f7346 (patch)
treee98706a35b1e18cad09f01d2346d9a1c938c081c /drivers/block/drbd/drbd_nl.c
parent19f843aa08e2d8f87a09b4c2edc43b00638423a8 (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.c8
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 */
530char *ppsize(char *buf, unsigned long long size) 531char *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}