Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable
* git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable: (22 commits) Btrfs: Fix async caching interaction with unmount Btrfs: change how we unpin extents Btrfs: Correct redundant test in add_inode_ref Btrfs: find smallest available device extent during chunk allocation Btrfs: clear all space_info->full after removing a block group Btrfs: make flushoncommit mount option correctly wait on ordered_extents Btrfs: Avoid delayed reference update looping Btrfs: Fix ordering of key field checks in btrfs_previous_item Btrfs: find_free_dev_extent doesn't handle holes at the start of the device Btrfs: Remove code duplication in comp_keys Btrfs: async block group caching Btrfs: use hybrid extents+bitmap rb tree for free space Btrfs: Fix crash on read failures at mount Btrfs: remove of redundant btrfs_header_level Btrfs: adjust NULL test Btrfs: Remove broken sanity check from btrfs_rmap_block() Btrfs: convert nested spin_lock_irqsave to spin_lock Btrfs: make sure all dirty blocks are written at commit time Btrfs: fix locking issue in btrfs_find_next_key Btrfs: fix double increment of path->slots[0] in btrfs_next_leaf ...
This commit is contained in:
@@ -481,7 +481,7 @@ struct btrfs_shared_data_ref {
|
||||
|
||||
struct btrfs_extent_inline_ref {
|
||||
u8 type;
|
||||
u64 offset;
|
||||
__le64 offset;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
/* old style backrefs item */
|
||||
@@ -689,6 +689,7 @@ struct btrfs_space_info {
|
||||
struct list_head block_groups;
|
||||
spinlock_t lock;
|
||||
struct rw_semaphore groups_sem;
|
||||
atomic_t caching_threads;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -707,6 +708,9 @@ struct btrfs_free_cluster {
|
||||
/* first extent starting offset */
|
||||
u64 window_start;
|
||||
|
||||
/* if this cluster simply points at a bitmap in the block group */
|
||||
bool points_to_bitmap;
|
||||
|
||||
struct btrfs_block_group_cache *block_group;
|
||||
/*
|
||||
* when a cluster is allocated from a block group, we put the
|
||||
@@ -716,24 +720,37 @@ struct btrfs_free_cluster {
|
||||
struct list_head block_group_list;
|
||||
};
|
||||
|
||||
enum btrfs_caching_type {
|
||||
BTRFS_CACHE_NO = 0,
|
||||
BTRFS_CACHE_STARTED = 1,
|
||||
BTRFS_CACHE_FINISHED = 2,
|
||||
};
|
||||
|
||||
struct btrfs_block_group_cache {
|
||||
struct btrfs_key key;
|
||||
struct btrfs_block_group_item item;
|
||||
struct btrfs_fs_info *fs_info;
|
||||
spinlock_t lock;
|
||||
struct mutex cache_mutex;
|
||||
u64 pinned;
|
||||
u64 reserved;
|
||||
u64 flags;
|
||||
int cached;
|
||||
u64 sectorsize;
|
||||
int extents_thresh;
|
||||
int free_extents;
|
||||
int total_bitmaps;
|
||||
int ro;
|
||||
int dirty;
|
||||
|
||||
/* cache tracking stuff */
|
||||
wait_queue_head_t caching_q;
|
||||
int cached;
|
||||
|
||||
struct btrfs_space_info *space_info;
|
||||
|
||||
/* free space cache stuff */
|
||||
spinlock_t tree_lock;
|
||||
struct rb_root free_space_bytes;
|
||||
struct rb_root free_space_offset;
|
||||
u64 free_space;
|
||||
|
||||
/* block group cache stuff */
|
||||
struct rb_node cache_node;
|
||||
@@ -942,6 +959,9 @@ struct btrfs_root {
|
||||
/* the node lock is held while changing the node pointer */
|
||||
spinlock_t node_lock;
|
||||
|
||||
/* taken when updating the commit root */
|
||||
struct rw_semaphore commit_root_sem;
|
||||
|
||||
struct extent_buffer *commit_root;
|
||||
struct btrfs_root *log_root;
|
||||
struct btrfs_root *reloc_root;
|
||||
@@ -1988,6 +2008,7 @@ void btrfs_delalloc_reserve_space(struct btrfs_root *root, struct inode *inode,
|
||||
u64 bytes);
|
||||
void btrfs_delalloc_free_space(struct btrfs_root *root, struct inode *inode,
|
||||
u64 bytes);
|
||||
void btrfs_free_pinned_extents(struct btrfs_fs_info *info);
|
||||
/* ctree.c */
|
||||
int btrfs_bin_search(struct extent_buffer *eb, struct btrfs_key *key,
|
||||
int level, int *slot);
|
||||
|
Reference in New Issue
Block a user