Loading fs/btrfs/ctree.c +8 −8 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ void btrfs_release_path(struct btrfs_root *root, struct btrfs_path *p) memset(p, 0, sizeof(*p)); } int btrfs_cow_block(struct btrfs_root *root, static int btrfs_cow_block(struct btrfs_root *root, struct btrfs_buffer *buf, struct btrfs_buffer *parent, int parent_slot, Loading Loading @@ -96,7 +96,7 @@ int btrfs_leaf_free_space(struct btrfs_leaf *leaf) /* * compare two keys in a memcmp fashion */ int comp_keys(struct btrfs_disk_key *disk, struct btrfs_key *k2) static int comp_keys(struct btrfs_disk_key *disk, struct btrfs_key *k2) { struct btrfs_key k1; Loading @@ -117,7 +117,7 @@ int comp_keys(struct btrfs_disk_key *disk, struct btrfs_key *k2) return 0; } int check_node(struct btrfs_path *path, int level) static int check_node(struct btrfs_path *path, int level) { int i; struct btrfs_node *parent = NULL; Loading Loading @@ -146,7 +146,7 @@ int check_node(struct btrfs_path *path, int level) return 0; } int check_leaf(struct btrfs_path *path, int level) static int check_leaf(struct btrfs_path *path, int level) { int i; struct btrfs_leaf *leaf = &path->nodes[level]->leaf; Loading Loading @@ -186,7 +186,7 @@ int check_leaf(struct btrfs_path *path, int level) return 0; } int check_block(struct btrfs_path *path, int level) static int check_block(struct btrfs_path *path, int level) { if (level == 0) return check_leaf(path, level); Loading @@ -202,7 +202,7 @@ int check_block(struct btrfs_path *path, int level) * * slot may point to max if the key is bigger than all of the keys */ int generic_bin_search(char *p, int item_size, struct btrfs_key *key, static int generic_bin_search(char *p, int item_size, struct btrfs_key *key, int max, int *slot) { int low = 0; Loading Loading @@ -233,7 +233,7 @@ int generic_bin_search(char *p, int item_size, struct btrfs_key *key, * simple bin_search frontend that does the right thing for * leaves vs nodes */ int bin_search(struct btrfs_node *c, struct btrfs_key *key, int *slot) static int bin_search(struct btrfs_node *c, struct btrfs_key *key, int *slot) { if (btrfs_is_leaf(c)) { struct btrfs_leaf *l = (struct btrfs_leaf *)c; Loading @@ -250,7 +250,7 @@ int bin_search(struct btrfs_node *c, struct btrfs_key *key, int *slot) return -1; } struct btrfs_buffer *read_node_slot(struct btrfs_root *root, static struct btrfs_buffer *read_node_slot(struct btrfs_root *root, struct btrfs_buffer *parent_buf, int slot) { Loading fs/btrfs/extent-tree.c +36 −11 Original line number Diff line number Diff line Loading @@ -365,8 +365,9 @@ static int find_free_extent(struct btrfs_root *orig_root, u64 num_blocks, * * returns 0 if everything worked, non-zero otherwise. */ int alloc_extent(struct btrfs_root *root, u64 num_blocks, u64 search_start, u64 search_end, u64 owner, struct btrfs_key *ins) static int alloc_extent(struct btrfs_root *root, u64 num_blocks, u64 search_start, u64 search_end, u64 owner, struct btrfs_key *ins) { int ret; int pending_ret; Loading Loading @@ -425,7 +426,12 @@ struct btrfs_buffer *btrfs_alloc_free_block(struct btrfs_root *root) return buf; } int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) /* * helper function for drop_snapshot, this walks down the tree dropping ref * counts as it goes. */ static int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) { struct btrfs_buffer *next; struct btrfs_buffer *cur; Loading @@ -437,6 +443,9 @@ int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) BUG_ON(ret); if (refs > 1) goto out; /* * walk down to the last node level and free all the leaves */ while(*level > 0) { cur = path->nodes[*level]; if (path->slots[*level] >= Loading Loading @@ -467,7 +476,13 @@ int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) return 0; } int walk_up_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) /* * helper for dropping snapshots. This walks back up the tree in the path * to find the first node higher up where we haven't yet gone through * all the slots */ static int walk_up_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) { int i; int slot; Loading @@ -491,9 +506,15 @@ int walk_up_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) return 1; } /* * drop the reference count on the tree rooted at 'snap'. This traverses * the tree freeing any blocks that have a ref count of zero after being * decremented. */ int btrfs_drop_snapshot(struct btrfs_root *root, struct btrfs_buffer *snap) { int ret; int ret = 0;; int wret; int level; struct btrfs_path path; int i; Loading @@ -506,18 +527,22 @@ int btrfs_drop_snapshot(struct btrfs_root *root, struct btrfs_buffer *snap) path.nodes[level] = snap; path.slots[level] = 0; while(1) { ret = walk_down_tree(root, &path, &level); if (ret > 0) wret = walk_down_tree(root, &path, &level); if (wret > 0) break; ret = walk_up_tree(root, &path, &level); if (ret > 0) if (wret < 0) ret = wret; wret = walk_up_tree(root, &path, &level); if (wret > 0) break; if (wret < 0) ret = wret; } for (i = 0; i <= orig_level; i++) { if (path.nodes[i]) { btrfs_block_release(root, path.nodes[i]); } } return 0; return ret; } Loading
fs/btrfs/ctree.c +8 −8 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ void btrfs_release_path(struct btrfs_root *root, struct btrfs_path *p) memset(p, 0, sizeof(*p)); } int btrfs_cow_block(struct btrfs_root *root, static int btrfs_cow_block(struct btrfs_root *root, struct btrfs_buffer *buf, struct btrfs_buffer *parent, int parent_slot, Loading Loading @@ -96,7 +96,7 @@ int btrfs_leaf_free_space(struct btrfs_leaf *leaf) /* * compare two keys in a memcmp fashion */ int comp_keys(struct btrfs_disk_key *disk, struct btrfs_key *k2) static int comp_keys(struct btrfs_disk_key *disk, struct btrfs_key *k2) { struct btrfs_key k1; Loading @@ -117,7 +117,7 @@ int comp_keys(struct btrfs_disk_key *disk, struct btrfs_key *k2) return 0; } int check_node(struct btrfs_path *path, int level) static int check_node(struct btrfs_path *path, int level) { int i; struct btrfs_node *parent = NULL; Loading Loading @@ -146,7 +146,7 @@ int check_node(struct btrfs_path *path, int level) return 0; } int check_leaf(struct btrfs_path *path, int level) static int check_leaf(struct btrfs_path *path, int level) { int i; struct btrfs_leaf *leaf = &path->nodes[level]->leaf; Loading Loading @@ -186,7 +186,7 @@ int check_leaf(struct btrfs_path *path, int level) return 0; } int check_block(struct btrfs_path *path, int level) static int check_block(struct btrfs_path *path, int level) { if (level == 0) return check_leaf(path, level); Loading @@ -202,7 +202,7 @@ int check_block(struct btrfs_path *path, int level) * * slot may point to max if the key is bigger than all of the keys */ int generic_bin_search(char *p, int item_size, struct btrfs_key *key, static int generic_bin_search(char *p, int item_size, struct btrfs_key *key, int max, int *slot) { int low = 0; Loading Loading @@ -233,7 +233,7 @@ int generic_bin_search(char *p, int item_size, struct btrfs_key *key, * simple bin_search frontend that does the right thing for * leaves vs nodes */ int bin_search(struct btrfs_node *c, struct btrfs_key *key, int *slot) static int bin_search(struct btrfs_node *c, struct btrfs_key *key, int *slot) { if (btrfs_is_leaf(c)) { struct btrfs_leaf *l = (struct btrfs_leaf *)c; Loading @@ -250,7 +250,7 @@ int bin_search(struct btrfs_node *c, struct btrfs_key *key, int *slot) return -1; } struct btrfs_buffer *read_node_slot(struct btrfs_root *root, static struct btrfs_buffer *read_node_slot(struct btrfs_root *root, struct btrfs_buffer *parent_buf, int slot) { Loading
fs/btrfs/extent-tree.c +36 −11 Original line number Diff line number Diff line Loading @@ -365,8 +365,9 @@ static int find_free_extent(struct btrfs_root *orig_root, u64 num_blocks, * * returns 0 if everything worked, non-zero otherwise. */ int alloc_extent(struct btrfs_root *root, u64 num_blocks, u64 search_start, u64 search_end, u64 owner, struct btrfs_key *ins) static int alloc_extent(struct btrfs_root *root, u64 num_blocks, u64 search_start, u64 search_end, u64 owner, struct btrfs_key *ins) { int ret; int pending_ret; Loading Loading @@ -425,7 +426,12 @@ struct btrfs_buffer *btrfs_alloc_free_block(struct btrfs_root *root) return buf; } int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) /* * helper function for drop_snapshot, this walks down the tree dropping ref * counts as it goes. */ static int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) { struct btrfs_buffer *next; struct btrfs_buffer *cur; Loading @@ -437,6 +443,9 @@ int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) BUG_ON(ret); if (refs > 1) goto out; /* * walk down to the last node level and free all the leaves */ while(*level > 0) { cur = path->nodes[*level]; if (path->slots[*level] >= Loading Loading @@ -467,7 +476,13 @@ int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) return 0; } int walk_up_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) /* * helper for dropping snapshots. This walks back up the tree in the path * to find the first node higher up where we haven't yet gone through * all the slots */ static int walk_up_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) { int i; int slot; Loading @@ -491,9 +506,15 @@ int walk_up_tree(struct btrfs_root *root, struct btrfs_path *path, int *level) return 1; } /* * drop the reference count on the tree rooted at 'snap'. This traverses * the tree freeing any blocks that have a ref count of zero after being * decremented. */ int btrfs_drop_snapshot(struct btrfs_root *root, struct btrfs_buffer *snap) { int ret; int ret = 0;; int wret; int level; struct btrfs_path path; int i; Loading @@ -506,18 +527,22 @@ int btrfs_drop_snapshot(struct btrfs_root *root, struct btrfs_buffer *snap) path.nodes[level] = snap; path.slots[level] = 0; while(1) { ret = walk_down_tree(root, &path, &level); if (ret > 0) wret = walk_down_tree(root, &path, &level); if (wret > 0) break; ret = walk_up_tree(root, &path, &level); if (ret > 0) if (wret < 0) ret = wret; wret = walk_up_tree(root, &path, &level); if (wret > 0) break; if (wret < 0) ret = wret; } for (i = 0; i <= orig_level; i++) { if (path.nodes[i]) { btrfs_block_release(root, path.nodes[i]); } } return 0; return ret; }