Loading fs/btrfs/TODO +1 −0 Original line number Original line Diff line number Diff line Loading @@ -7,6 +7,7 @@ * Get rid of struct ctree_path, limiting tree levels held at one time * Get rid of struct ctree_path, limiting tree levels held at one time * Add generation number to key pointer in nodes * Add generation number to key pointer in nodes * Add generation number to inode * Add generation number to inode * Add ability to switch a block group from data to metadata or vice versa * Release * Release * Do real tree locking * Do real tree locking * Add extent mirroring (backup copies of blocks) * Add extent mirroring (backup copies of blocks) Loading fs/btrfs/bit-radix.c +7 −3 Original line number Original line Diff line number Diff line Loading @@ -77,7 +77,7 @@ int clear_radix_bit(struct radix_tree_root *radix, unsigned long bit) } } int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, int nr) unsigned long start, int nr) { { unsigned long *bits; unsigned long *bits; unsigned long *gang[4]; unsigned long *gang[4]; Loading @@ -85,10 +85,13 @@ int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, int ret; int ret; int i; int i; int total_found = 0; int total_found = 0; unsigned long slot; ret = radix_tree_gang_lookup(radix, (void **)gang, 0, ARRAY_SIZE(gang)); slot = start / BIT_RADIX_BITS_PER_ARRAY; ret = radix_tree_gang_lookup(radix, (void **)gang, slot, ARRAY_SIZE(gang)); found = start % BIT_RADIX_BITS_PER_ARRAY; for (i = 0; i < ret && nr > 0; i++) { for (i = 0; i < ret && nr > 0; i++) { found = 0; bits = gang[i]; bits = gang[i]; while(nr > 0) { while(nr > 0) { found = find_next_bit(bits + 1, found = find_next_bit(bits + 1, Loading @@ -104,6 +107,7 @@ int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, } else } else break; break; } } found = 0; } } return total_found; return total_found; } } fs/btrfs/bit-radix.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -6,7 +6,7 @@ int set_radix_bit(struct radix_tree_root *radix, unsigned long bit); int test_radix_bit(struct radix_tree_root *radix, unsigned long bit); int test_radix_bit(struct radix_tree_root *radix, unsigned long bit); int clear_radix_bit(struct radix_tree_root *radix, unsigned long bit); int clear_radix_bit(struct radix_tree_root *radix, unsigned long bit); int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, int nr); unsigned long start, int nr); static inline void init_bit_radix(struct radix_tree_root *radix) static inline void init_bit_radix(struct radix_tree_root *radix) { { Loading fs/btrfs/ctree.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -259,7 +259,9 @@ struct btrfs_block_group_cache { u64 first_free; u64 first_free; u64 last_alloc; u64 last_alloc; u64 pinned; u64 pinned; u64 last_prealloc; int data; int data; int cached; }; }; struct crypto_hash; struct crypto_hash; Loading @@ -273,6 +275,7 @@ struct btrfs_fs_info { struct radix_tree_root dev_radix; struct radix_tree_root dev_radix; struct radix_tree_root block_group_radix; struct radix_tree_root block_group_radix; struct radix_tree_root block_group_data_radix; struct radix_tree_root block_group_data_radix; struct radix_tree_root extent_map_radix; u64 extent_tree_insert[BTRFS_MAX_LEVEL * 3]; u64 extent_tree_insert[BTRFS_MAX_LEVEL * 3]; int extent_tree_insert_nr; int extent_tree_insert_nr; Loading fs/btrfs/disk-io.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -551,6 +551,7 @@ struct btrfs_root *open_ctree(struct super_block *sb) init_bit_radix(&fs_info->pinned_radix); init_bit_radix(&fs_info->pinned_radix); init_bit_radix(&fs_info->pending_del_radix); init_bit_radix(&fs_info->pending_del_radix); init_bit_radix(&fs_info->extent_map_radix); INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_NOFS); INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_NOFS); INIT_RADIX_TREE(&fs_info->dev_radix, GFP_NOFS); INIT_RADIX_TREE(&fs_info->dev_radix, GFP_NOFS); INIT_RADIX_TREE(&fs_info->block_group_radix, GFP_KERNEL); INIT_RADIX_TREE(&fs_info->block_group_radix, GFP_KERNEL); Loading Loading
fs/btrfs/TODO +1 −0 Original line number Original line Diff line number Diff line Loading @@ -7,6 +7,7 @@ * Get rid of struct ctree_path, limiting tree levels held at one time * Get rid of struct ctree_path, limiting tree levels held at one time * Add generation number to key pointer in nodes * Add generation number to key pointer in nodes * Add generation number to inode * Add generation number to inode * Add ability to switch a block group from data to metadata or vice versa * Release * Release * Do real tree locking * Do real tree locking * Add extent mirroring (backup copies of blocks) * Add extent mirroring (backup copies of blocks) Loading
fs/btrfs/bit-radix.c +7 −3 Original line number Original line Diff line number Diff line Loading @@ -77,7 +77,7 @@ int clear_radix_bit(struct radix_tree_root *radix, unsigned long bit) } } int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, int nr) unsigned long start, int nr) { { unsigned long *bits; unsigned long *bits; unsigned long *gang[4]; unsigned long *gang[4]; Loading @@ -85,10 +85,13 @@ int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, int ret; int ret; int i; int i; int total_found = 0; int total_found = 0; unsigned long slot; ret = radix_tree_gang_lookup(radix, (void **)gang, 0, ARRAY_SIZE(gang)); slot = start / BIT_RADIX_BITS_PER_ARRAY; ret = radix_tree_gang_lookup(radix, (void **)gang, slot, ARRAY_SIZE(gang)); found = start % BIT_RADIX_BITS_PER_ARRAY; for (i = 0; i < ret && nr > 0; i++) { for (i = 0; i < ret && nr > 0; i++) { found = 0; bits = gang[i]; bits = gang[i]; while(nr > 0) { while(nr > 0) { found = find_next_bit(bits + 1, found = find_next_bit(bits + 1, Loading @@ -104,6 +107,7 @@ int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, } else } else break; break; } } found = 0; } } return total_found; return total_found; } }
fs/btrfs/bit-radix.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -6,7 +6,7 @@ int set_radix_bit(struct radix_tree_root *radix, unsigned long bit); int test_radix_bit(struct radix_tree_root *radix, unsigned long bit); int test_radix_bit(struct radix_tree_root *radix, unsigned long bit); int clear_radix_bit(struct radix_tree_root *radix, unsigned long bit); int clear_radix_bit(struct radix_tree_root *radix, unsigned long bit); int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, int find_first_radix_bit(struct radix_tree_root *radix, unsigned long *retbits, int nr); unsigned long start, int nr); static inline void init_bit_radix(struct radix_tree_root *radix) static inline void init_bit_radix(struct radix_tree_root *radix) { { Loading
fs/btrfs/ctree.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -259,7 +259,9 @@ struct btrfs_block_group_cache { u64 first_free; u64 first_free; u64 last_alloc; u64 last_alloc; u64 pinned; u64 pinned; u64 last_prealloc; int data; int data; int cached; }; }; struct crypto_hash; struct crypto_hash; Loading @@ -273,6 +275,7 @@ struct btrfs_fs_info { struct radix_tree_root dev_radix; struct radix_tree_root dev_radix; struct radix_tree_root block_group_radix; struct radix_tree_root block_group_radix; struct radix_tree_root block_group_data_radix; struct radix_tree_root block_group_data_radix; struct radix_tree_root extent_map_radix; u64 extent_tree_insert[BTRFS_MAX_LEVEL * 3]; u64 extent_tree_insert[BTRFS_MAX_LEVEL * 3]; int extent_tree_insert_nr; int extent_tree_insert_nr; Loading
fs/btrfs/disk-io.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -551,6 +551,7 @@ struct btrfs_root *open_ctree(struct super_block *sb) init_bit_radix(&fs_info->pinned_radix); init_bit_radix(&fs_info->pinned_radix); init_bit_radix(&fs_info->pending_del_radix); init_bit_radix(&fs_info->pending_del_radix); init_bit_radix(&fs_info->extent_map_radix); INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_NOFS); INIT_RADIX_TREE(&fs_info->fs_roots_radix, GFP_NOFS); INIT_RADIX_TREE(&fs_info->dev_radix, GFP_NOFS); INIT_RADIX_TREE(&fs_info->dev_radix, GFP_NOFS); INIT_RADIX_TREE(&fs_info->block_group_radix, GFP_KERNEL); INIT_RADIX_TREE(&fs_info->block_group_radix, GFP_KERNEL); Loading