Loading fs/btrfs/ctree.c +12 −5 Original line number Diff line number Diff line Loading @@ -1087,7 +1087,9 @@ static int del_ptr(struct ctree_root *root, struct ctree_path *path, int level) break; } level++; free_extent(root, blocknr, 1); wret = free_extent(root, blocknr, 1); if (wret) ret = wret; if (!path->nodes[level]) BUG(); } Loading Loading @@ -1136,7 +1138,9 @@ int del_item(struct ctree_root *root, struct ctree_path *path) wret = del_ptr(root, path, 1); if (wret) ret = wret; free_extent(root, leaf_buf->blocknr, 1); wret = free_extent(root, leaf_buf->blocknr, 1); if (wret) ret = wret; } } else { int used = leaf_space_used(leaf, 0, leaf->header.nritems); Loading Loading @@ -1173,7 +1177,9 @@ int del_item(struct ctree_root *root, struct ctree_path *path) if (wret) ret = wret; tree_block_release(root, leaf_buf); free_extent(root, blocknr, 1); wret = free_extent(root, blocknr, 1); if (wret) ret = wret; } else { tree_block_release(root, leaf_buf); } Loading @@ -1184,7 +1190,8 @@ int del_item(struct ctree_root *root, struct ctree_path *path) /* * walk up the tree as far as required to find the next leaf. * returns 0 if it found something or -1 if there are no greater leaves. * returns 0 if it found something or 1 if there are no greater leaves. * returns < 0 on io errors. */ int next_leaf(struct ctree_root *root, struct ctree_path *path) { Loading @@ -1196,7 +1203,7 @@ int next_leaf(struct ctree_root *root, struct ctree_path *path) while(level < MAX_LEVEL) { if (!path->nodes[level]) return -1; return 1; slot = path->slots[level] + 1; c = path->nodes[level]; if (slot >= c->node.header.nritems) { Loading fs/btrfs/extent-tree.c +9 −6 Original line number Diff line number Diff line Loading @@ -105,7 +105,7 @@ int free_extent(struct ctree_root *root, u64 blocknr, u64 num_blocks) * ins->offset == number of blocks * Any available blocks before search_start are skipped. */ int find_free_extent(struct ctree_root *orig_root, u64 num_blocks, static int find_free_extent(struct ctree_root *orig_root, u64 num_blocks, u64 search_start, u64 search_end, struct key *ins) { struct ctree_path path; Loading @@ -125,10 +125,8 @@ int find_free_extent(struct ctree_root *orig_root, u64 num_blocks, ins->flags = 0; start_found = 0; ret = search_slot(root, ins, &path, 0); if (ret < 0) { release_path(root, &path); return ret; } if (ret < 0) goto error; while (1) { l = &path.nodes[0]->leaf; Loading @@ -137,6 +135,8 @@ int find_free_extent(struct ctree_root *orig_root, u64 num_blocks, ret = next_leaf(root, &path); if (ret == 0) continue; if (ret < 0) goto error; if (!start_found) { ins->objectid = search_start; ins->offset = num_blocks; Loading Loading @@ -187,6 +187,9 @@ int find_free_extent(struct ctree_root *orig_root, u64 num_blocks, if (ins->offset != 1) BUG(); return 0; error: release_path(root, &path); return ret; } /* Loading Loading
fs/btrfs/ctree.c +12 −5 Original line number Diff line number Diff line Loading @@ -1087,7 +1087,9 @@ static int del_ptr(struct ctree_root *root, struct ctree_path *path, int level) break; } level++; free_extent(root, blocknr, 1); wret = free_extent(root, blocknr, 1); if (wret) ret = wret; if (!path->nodes[level]) BUG(); } Loading Loading @@ -1136,7 +1138,9 @@ int del_item(struct ctree_root *root, struct ctree_path *path) wret = del_ptr(root, path, 1); if (wret) ret = wret; free_extent(root, leaf_buf->blocknr, 1); wret = free_extent(root, leaf_buf->blocknr, 1); if (wret) ret = wret; } } else { int used = leaf_space_used(leaf, 0, leaf->header.nritems); Loading Loading @@ -1173,7 +1177,9 @@ int del_item(struct ctree_root *root, struct ctree_path *path) if (wret) ret = wret; tree_block_release(root, leaf_buf); free_extent(root, blocknr, 1); wret = free_extent(root, blocknr, 1); if (wret) ret = wret; } else { tree_block_release(root, leaf_buf); } Loading @@ -1184,7 +1190,8 @@ int del_item(struct ctree_root *root, struct ctree_path *path) /* * walk up the tree as far as required to find the next leaf. * returns 0 if it found something or -1 if there are no greater leaves. * returns 0 if it found something or 1 if there are no greater leaves. * returns < 0 on io errors. */ int next_leaf(struct ctree_root *root, struct ctree_path *path) { Loading @@ -1196,7 +1203,7 @@ int next_leaf(struct ctree_root *root, struct ctree_path *path) while(level < MAX_LEVEL) { if (!path->nodes[level]) return -1; return 1; slot = path->slots[level] + 1; c = path->nodes[level]; if (slot >= c->node.header.nritems) { Loading
fs/btrfs/extent-tree.c +9 −6 Original line number Diff line number Diff line Loading @@ -105,7 +105,7 @@ int free_extent(struct ctree_root *root, u64 blocknr, u64 num_blocks) * ins->offset == number of blocks * Any available blocks before search_start are skipped. */ int find_free_extent(struct ctree_root *orig_root, u64 num_blocks, static int find_free_extent(struct ctree_root *orig_root, u64 num_blocks, u64 search_start, u64 search_end, struct key *ins) { struct ctree_path path; Loading @@ -125,10 +125,8 @@ int find_free_extent(struct ctree_root *orig_root, u64 num_blocks, ins->flags = 0; start_found = 0; ret = search_slot(root, ins, &path, 0); if (ret < 0) { release_path(root, &path); return ret; } if (ret < 0) goto error; while (1) { l = &path.nodes[0]->leaf; Loading @@ -137,6 +135,8 @@ int find_free_extent(struct ctree_root *orig_root, u64 num_blocks, ret = next_leaf(root, &path); if (ret == 0) continue; if (ret < 0) goto error; if (!start_found) { ins->objectid = search_start; ins->offset = num_blocks; Loading Loading @@ -187,6 +187,9 @@ int find_free_extent(struct ctree_root *orig_root, u64 num_blocks, if (ins->offset != 1) BUG(); return 0; error: release_path(root, &path); return ret; } /* Loading