diff options
author | Josef Bacik <jbacik@fb.com> | 2015-10-02 21:25:10 +0200 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2015-10-22 03:55:39 +0200 |
commit | c759c4e16179e47e099f491011e6acd7858f8625 (patch) | |
tree | 1b97ad895f5546f867d0b12df3910848e69f1016 /fs/btrfs/free-space-cache.c | |
parent | Btrfs: cut down on loops through the allocator (diff) | |
download | linux-c759c4e16179e47e099f491011e6acd7858f8625.tar.xz linux-c759c4e16179e47e099f491011e6acd7858f8625.zip |
Btrfs: don't keep trying to build clusters if we are fragmented
If we are extremely fragmented then we won't be able to create a free_cluster.
So if this happens set last_ptr->fragmented so that all future allcations will
give up trying to create a cluster. When we unpin extents we will unset
->fragmented if we free up a sufficient amount of space in a block group.
Thanks,
Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs/btrfs/free-space-cache.c')
-rw-r--r-- | fs/btrfs/free-space-cache.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index c0eb84ecb78f..a5922e814ada 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c @@ -3063,6 +3063,7 @@ void btrfs_init_free_cluster(struct btrfs_free_cluster *cluster) spin_lock_init(&cluster->refill_lock); cluster->root = RB_ROOT; cluster->max_size = 0; + cluster->fragmented = false; INIT_LIST_HEAD(&cluster->block_group_list); cluster->block_group = NULL; } |