btrfs: Fix calculation of rbio->dbitmap's size calculation
authorZhao Lei <zhaolei@cn.fujitsu.com>
Mon, 8 Dec 2014 11:55:57 +0000 (19:55 +0800)
committerChris Mason <clm@fb.com>
Wed, 20 Jan 2016 15:22:15 +0000 (07:22 -0800)
Current code is trying to calculate rbio->dbitmap's size to make it
align to sizeof(long), but implement haven't achived this object,
it is align to sizeof(char) instead.
This patch fixed above calculation, and use sizeof(long) instead of
fixed "8" to increate compatibility.

Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/raid56.c
fs/btrfs/scrub.c

index 6d707545f775119e4883378636b5255a9dcc9144..9ee11b41ba5d21481cb1ae5347d54df26010f1b9 100644 (file)
@@ -966,8 +966,8 @@ static struct btrfs_raid_bio *alloc_rbio(struct btrfs_root *root,
        void *p;
 
        rbio = kzalloc(sizeof(*rbio) + num_pages * sizeof(struct page *) * 2 +
-                      DIV_ROUND_UP(stripe_npages, BITS_PER_LONG / 8),
-                       GFP_NOFS);
+                      DIV_ROUND_UP(stripe_npages, BITS_PER_LONG) *
+                      sizeof(long), GFP_NOFS);
        if (!rbio)
                return ERR_PTR(-ENOMEM);
 
index 681db07f25ea8e66b37fd1c742c35e6dd97a3b58..b1a68530e9119515218d2b09770b2654ea40728b 100644 (file)
@@ -2813,7 +2813,7 @@ out:
 
 static inline int scrub_calc_parity_bitmap_len(int nsectors)
 {
-       return DIV_ROUND_UP(nsectors, BITS_PER_LONG) * (BITS_PER_LONG / 8);
+       return DIV_ROUND_UP(nsectors, BITS_PER_LONG) * sizeof(long);
 }
 
 static void scrub_parity_get(struct scrub_parity *sparity)