Merge branch 'ino-alloc' of git://repo.or.cz/linux-btrfs-devel into inode_numbers
[pandora-kernel.git] / fs / btrfs / free-space-cache.c
index 7d8b6b6..25a13ab 100644 (file)
@@ -1804,12 +1804,11 @@ out:
        return 0;
 }
 
-void __btrfs_remove_free_space_cache(struct btrfs_free_space_ctl *ctl)
+void __btrfs_remove_free_space_cache_locked(struct btrfs_free_space_ctl *ctl)
 {
        struct btrfs_free_space *info;
        struct rb_node *node;
 
-       spin_lock(&ctl->tree_lock);
        while ((node = rb_last(&ctl->free_space_offset)) != NULL) {
                info = rb_entry(node, struct btrfs_free_space, offset_index);
                unlink_free_space(ctl, info);
@@ -1821,6 +1820,12 @@ void __btrfs_remove_free_space_cache(struct btrfs_free_space_ctl *ctl)
                        spin_lock(&ctl->tree_lock);
                }
        }
+}
+
+void __btrfs_remove_free_space_cache(struct btrfs_free_space_ctl *ctl)
+{
+       spin_lock(&ctl->tree_lock);
+       __btrfs_remove_free_space_cache_locked(ctl);
        spin_unlock(&ctl->tree_lock);
 }
 
@@ -1844,9 +1849,9 @@ void btrfs_remove_free_space_cache(struct btrfs_block_group_cache *block_group)
                        spin_lock(&ctl->tree_lock);
                }
        }
+       __btrfs_remove_free_space_cache_locked(ctl);
        spin_unlock(&ctl->tree_lock);
 
-       __btrfs_remove_free_space_cache(ctl);
 }
 
 u64 btrfs_find_space_for_alloc(struct btrfs_block_group_cache *block_group,
@@ -2374,7 +2379,7 @@ int btrfs_trim_block_group(struct btrfs_block_group_cache *block_group,
                        start = entry->offset;
                        bytes = min(entry->bytes, end - start);
                        unlink_free_space(ctl, entry);
-                       kfree(entry);
+                       kmem_cache_free(btrfs_free_space_cachep, entry);
                }
 
                spin_unlock(&ctl->tree_lock);