diff options
author | Chris Mason <chris.mason@oracle.com> | 2009-06-09 18:35:15 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2009-06-10 11:29:51 -0400 |
commit | c604480171c510c1beeb81b82418e5bc4de8f1ae (patch) | |
tree | 54be031aa42874f827e1c7d2aa79f1ec54b36a33 | |
parent | 3b30c22f64a6bb297719c60e494af1d26563f584 (diff) | |
download | op-kernel-dev-c604480171c510c1beeb81b82418e5bc4de8f1ae.zip op-kernel-dev-c604480171c510c1beeb81b82418e5bc4de8f1ae.tar.gz |
Btrfs: avoid allocation clusters that are too spread out
In SSD mode for data, and all the time for metadata the allocator
will try to find a cluster of nearby blocks for allocations. This
commit adds extra checks to make sure that each free block in the
cluster is close to the last one.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r-- | fs/btrfs/free-space-cache.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index 28016558..ac23476 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c @@ -645,7 +645,8 @@ again: * we haven't filled the empty size and the window is * very large. reset and try again */ - if (next->offset - window_start > (bytes + empty_size) * 2) { + if (next->offset - (last->offset + last->bytes) > 128 * 1024 || + next->offset - window_start > (bytes + empty_size) * 2) { entry = next; window_start = entry->offset; window_free = entry->bytes; |