diff options
author | Chris Mason <chris.mason@oracle.com> | 2012-01-31 20:19:02 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2012-03-28 20:34:10 -0400 |
commit | 7ca4be45a0255ac8f08c05491c6add2dd87dd4f8 (patch) | |
tree | aca39ca7f1d210138733cb3be54c408a2acf302b | |
parent | 3c4bb26b213e618473e486776483a5bad15ba6da (diff) | |
download | op-kernel-dev-7ca4be45a0255ac8f08c05491c6add2dd87dd4f8.zip op-kernel-dev-7ca4be45a0255ac8f08c05491c6add2dd87dd4f8.tar.gz |
Btrfs: don't use crc items bigger than 4KB
With the big metadata blocks, we can have crc items
that are much bigger than a page. There are a few
places that we try to kmalloc memory to hold the
items during a split.
Items bigger than 4KB don't really have a huge benefit
in efficiency, but they do trigger larger order allocations.
This commits changes the csums to make sure they stay under
4KB. This is not a format change, just a #define to limit
huge items.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r-- | fs/btrfs/file-item.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c index a14dbca..cab0ffb 100644 --- a/fs/btrfs/file-item.c +++ b/fs/btrfs/file-item.c @@ -25,10 +25,12 @@ #include "transaction.h" #include "print-tree.h" -#define MAX_CSUM_ITEMS(r, size) ((((BTRFS_LEAF_DATA_SIZE(r) - \ +#define __MAX_CSUM_ITEMS(r, size) ((((BTRFS_LEAF_DATA_SIZE(r) - \ sizeof(struct btrfs_item) * 2) / \ size) - 1)) +#define MAX_CSUM_ITEMS(r, size) (min(__MAX_CSUM_ITEMS(r, size), PAGE_CACHE_SIZE)) + #define MAX_ORDERED_SUM_BYTES(r) ((PAGE_SIZE - \ sizeof(struct btrfs_ordered_sum)) / \ sizeof(struct btrfs_sector_sum) * \ |