drbd: fix potential wrap of 32bit oos:%lu display in /proc/drbd
authorLars Ellenberg <lars.ellenberg@linbit.com>
Tue, 9 Nov 2010 13:12:10 +0000 (14:12 +0100)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Thu, 10 Mar 2011 10:19:04 +0000 (11:19 +0100)
When converting bits (4k resolution, still) to kB, we shift left.  If it
was a large number of bits on a 32bit box (>= 4 TiB storage), we may
wrap the 32bit unsigned long base type, resulting in incorrect display.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
drivers/block/drbd/drbd_proc.c

index fab3fde3477b3af434015b3cb4106083e96189f8..07368b75392ab3fcb155d8ef2d94879d1019db48 100644 (file)
@@ -259,8 +259,9 @@ static int drbd_seq_show(struct seq_file *seq, void *v)
                           mdev->epochs,
                           write_ordering_chars[mdev->write_ordering]
                        );
-                       seq_printf(seq, " oos:%lu\n",
-                                  Bit2KB(drbd_bm_total_weight(mdev)));
+                       seq_printf(seq, " oos:%llu\n",
+                                  Bit2KB((unsigned long long)
+                                          drbd_bm_total_weight(mdev)));
                }
                if (mdev->state.conn == C_SYNC_SOURCE ||
                    mdev->state.conn == C_SYNC_TARGET ||