diff options
author | Chris Mason <clm@fb.com> | 2014-10-04 12:57:14 -0400 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-10-04 12:57:14 -0400 |
commit | 27b19cc8864e206c4203041892b0f706f044a0f1 (patch) | |
tree | f724dd77efa379da881fba7f46075af17a728bf9 /fs/btrfs/ctree.c | |
parent | bbf65cf0b5b67843ca094df01019222b85af2183 (diff) | |
parent | 4d75f8a9c87b843c8ded15b82b8d137b9724cccc (diff) |
Merge branch 'cleanup/blocksize-diet-part1' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux into for-linus
Diffstat (limited to 'fs/btrfs/ctree.c')
-rw-r--r-- | fs/btrfs/ctree.c | 54 |
1 files changed, 22 insertions, 32 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index b289d2a9bbf5..19bc6162fb8e 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c | |||
@@ -258,9 +258,8 @@ int btrfs_copy_root(struct btrfs_trans_handle *trans, | |||
258 | else | 258 | else |
259 | btrfs_node_key(buf, &disk_key, 0); | 259 | btrfs_node_key(buf, &disk_key, 0); |
260 | 260 | ||
261 | cow = btrfs_alloc_free_block(trans, root, buf->len, 0, | 261 | cow = btrfs_alloc_tree_block(trans, root, 0, new_root_objectid, |
262 | new_root_objectid, &disk_key, level, | 262 | &disk_key, level, buf->start, 0); |
263 | buf->start, 0); | ||
264 | if (IS_ERR(cow)) | 263 | if (IS_ERR(cow)) |
265 | return PTR_ERR(cow); | 264 | return PTR_ERR(cow); |
266 | 265 | ||
@@ -1133,9 +1132,9 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans, | |||
1133 | } else | 1132 | } else |
1134 | parent_start = 0; | 1133 | parent_start = 0; |
1135 | 1134 | ||
1136 | cow = btrfs_alloc_free_block(trans, root, buf->len, parent_start, | 1135 | cow = btrfs_alloc_tree_block(trans, root, parent_start, |
1137 | root->root_key.objectid, &disk_key, | 1136 | root->root_key.objectid, &disk_key, level, |
1138 | level, search_start, empty_size); | 1137 | search_start, empty_size); |
1139 | if (IS_ERR(cow)) | 1138 | if (IS_ERR(cow)) |
1140 | return PTR_ERR(cow); | 1139 | return PTR_ERR(cow); |
1141 | 1140 | ||
@@ -1425,7 +1424,6 @@ get_old_root(struct btrfs_root *root, u64 time_seq) | |||
1425 | struct tree_mod_root *old_root = NULL; | 1424 | struct tree_mod_root *old_root = NULL; |
1426 | u64 old_generation = 0; | 1425 | u64 old_generation = 0; |
1427 | u64 logical; | 1426 | u64 logical; |
1428 | u32 blocksize; | ||
1429 | 1427 | ||
1430 | eb_root = btrfs_read_lock_root_node(root); | 1428 | eb_root = btrfs_read_lock_root_node(root); |
1431 | tm = __tree_mod_log_oldest_root(root->fs_info, eb_root, time_seq); | 1429 | tm = __tree_mod_log_oldest_root(root->fs_info, eb_root, time_seq); |
@@ -1444,8 +1442,7 @@ get_old_root(struct btrfs_root *root, u64 time_seq) | |||
1444 | if (old_root && tm && tm->op != MOD_LOG_KEY_REMOVE_WHILE_FREEING) { | 1442 | if (old_root && tm && tm->op != MOD_LOG_KEY_REMOVE_WHILE_FREEING) { |
1445 | btrfs_tree_read_unlock(eb_root); | 1443 | btrfs_tree_read_unlock(eb_root); |
1446 | free_extent_buffer(eb_root); | 1444 | free_extent_buffer(eb_root); |
1447 | blocksize = root->nodesize; | 1445 | old = read_tree_block(root, logical, 0); |
1448 | old = read_tree_block(root, logical, blocksize, 0); | ||
1449 | if (WARN_ON(!old || !extent_buffer_uptodate(old))) { | 1446 | if (WARN_ON(!old || !extent_buffer_uptodate(old))) { |
1450 | free_extent_buffer(old); | 1447 | free_extent_buffer(old); |
1451 | btrfs_warn(root->fs_info, | 1448 | btrfs_warn(root->fs_info, |
@@ -1684,15 +1681,14 @@ int btrfs_realloc_node(struct btrfs_trans_handle *trans, | |||
1684 | continue; | 1681 | continue; |
1685 | } | 1682 | } |
1686 | 1683 | ||
1687 | cur = btrfs_find_tree_block(root, blocknr, blocksize); | 1684 | cur = btrfs_find_tree_block(root, blocknr); |
1688 | if (cur) | 1685 | if (cur) |
1689 | uptodate = btrfs_buffer_uptodate(cur, gen, 0); | 1686 | uptodate = btrfs_buffer_uptodate(cur, gen, 0); |
1690 | else | 1687 | else |
1691 | uptodate = 0; | 1688 | uptodate = 0; |
1692 | if (!cur || !uptodate) { | 1689 | if (!cur || !uptodate) { |
1693 | if (!cur) { | 1690 | if (!cur) { |
1694 | cur = read_tree_block(root, blocknr, | 1691 | cur = read_tree_block(root, blocknr, gen); |
1695 | blocksize, gen); | ||
1696 | if (!cur || !extent_buffer_uptodate(cur)) { | 1692 | if (!cur || !extent_buffer_uptodate(cur)) { |
1697 | free_extent_buffer(cur); | 1693 | free_extent_buffer(cur); |
1698 | return -EIO; | 1694 | return -EIO; |
@@ -1871,7 +1867,6 @@ static noinline struct extent_buffer *read_node_slot(struct btrfs_root *root, | |||
1871 | BUG_ON(level == 0); | 1867 | BUG_ON(level == 0); |
1872 | 1868 | ||
1873 | eb = read_tree_block(root, btrfs_node_blockptr(parent, slot), | 1869 | eb = read_tree_block(root, btrfs_node_blockptr(parent, slot), |
1874 | root->nodesize, | ||
1875 | btrfs_node_ptr_generation(parent, slot)); | 1870 | btrfs_node_ptr_generation(parent, slot)); |
1876 | if (eb && !extent_buffer_uptodate(eb)) { | 1871 | if (eb && !extent_buffer_uptodate(eb)) { |
1877 | free_extent_buffer(eb); | 1872 | free_extent_buffer(eb); |
@@ -2267,7 +2262,7 @@ static void reada_for_search(struct btrfs_root *root, | |||
2267 | 2262 | ||
2268 | search = btrfs_node_blockptr(node, slot); | 2263 | search = btrfs_node_blockptr(node, slot); |
2269 | blocksize = root->nodesize; | 2264 | blocksize = root->nodesize; |
2270 | eb = btrfs_find_tree_block(root, search, blocksize); | 2265 | eb = btrfs_find_tree_block(root, search); |
2271 | if (eb) { | 2266 | if (eb) { |
2272 | free_extent_buffer(eb); | 2267 | free_extent_buffer(eb); |
2273 | return; | 2268 | return; |
@@ -2297,7 +2292,7 @@ static void reada_for_search(struct btrfs_root *root, | |||
2297 | if ((search <= target && target - search <= 65536) || | 2292 | if ((search <= target && target - search <= 65536) || |
2298 | (search > target && search - target <= 65536)) { | 2293 | (search > target && search - target <= 65536)) { |
2299 | gen = btrfs_node_ptr_generation(node, nr); | 2294 | gen = btrfs_node_ptr_generation(node, nr); |
2300 | readahead_tree_block(root, search, blocksize, gen); | 2295 | readahead_tree_block(root, search, blocksize); |
2301 | nread += blocksize; | 2296 | nread += blocksize; |
2302 | } | 2297 | } |
2303 | nscan++; | 2298 | nscan++; |
@@ -2329,7 +2324,7 @@ static noinline void reada_for_balance(struct btrfs_root *root, | |||
2329 | if (slot > 0) { | 2324 | if (slot > 0) { |
2330 | block1 = btrfs_node_blockptr(parent, slot - 1); | 2325 | block1 = btrfs_node_blockptr(parent, slot - 1); |
2331 | gen = btrfs_node_ptr_generation(parent, slot - 1); | 2326 | gen = btrfs_node_ptr_generation(parent, slot - 1); |
2332 | eb = btrfs_find_tree_block(root, block1, blocksize); | 2327 | eb = btrfs_find_tree_block(root, block1); |
2333 | /* | 2328 | /* |
2334 | * if we get -eagain from btrfs_buffer_uptodate, we | 2329 | * if we get -eagain from btrfs_buffer_uptodate, we |
2335 | * don't want to return eagain here. That will loop | 2330 | * don't want to return eagain here. That will loop |
@@ -2342,16 +2337,16 @@ static noinline void reada_for_balance(struct btrfs_root *root, | |||
2342 | if (slot + 1 < nritems) { | 2337 | if (slot + 1 < nritems) { |
2343 | block2 = btrfs_node_blockptr(parent, slot + 1); | 2338 | block2 = btrfs_node_blockptr(parent, slot + 1); |
2344 | gen = btrfs_node_ptr_generation(parent, slot + 1); | 2339 | gen = btrfs_node_ptr_generation(parent, slot + 1); |
2345 | eb = btrfs_find_tree_block(root, block2, blocksize); | 2340 | eb = btrfs_find_tree_block(root, block2); |
2346 | if (eb && btrfs_buffer_uptodate(eb, gen, 1) != 0) | 2341 | if (eb && btrfs_buffer_uptodate(eb, gen, 1) != 0) |
2347 | block2 = 0; | 2342 | block2 = 0; |
2348 | free_extent_buffer(eb); | 2343 | free_extent_buffer(eb); |
2349 | } | 2344 | } |
2350 | 2345 | ||
2351 | if (block1) | 2346 | if (block1) |
2352 | readahead_tree_block(root, block1, blocksize, 0); | 2347 | readahead_tree_block(root, block1, blocksize); |
2353 | if (block2) | 2348 | if (block2) |
2354 | readahead_tree_block(root, block2, blocksize, 0); | 2349 | readahead_tree_block(root, block2, blocksize); |
2355 | } | 2350 | } |
2356 | 2351 | ||
2357 | 2352 | ||
@@ -2453,16 +2448,14 @@ read_block_for_search(struct btrfs_trans_handle *trans, | |||
2453 | { | 2448 | { |
2454 | u64 blocknr; | 2449 | u64 blocknr; |
2455 | u64 gen; | 2450 | u64 gen; |
2456 | u32 blocksize; | ||
2457 | struct extent_buffer *b = *eb_ret; | 2451 | struct extent_buffer *b = *eb_ret; |
2458 | struct extent_buffer *tmp; | 2452 | struct extent_buffer *tmp; |
2459 | int ret; | 2453 | int ret; |
2460 | 2454 | ||
2461 | blocknr = btrfs_node_blockptr(b, slot); | 2455 | blocknr = btrfs_node_blockptr(b, slot); |
2462 | gen = btrfs_node_ptr_generation(b, slot); | 2456 | gen = btrfs_node_ptr_generation(b, slot); |
2463 | blocksize = root->nodesize; | ||
2464 | 2457 | ||
2465 | tmp = btrfs_find_tree_block(root, blocknr, blocksize); | 2458 | tmp = btrfs_find_tree_block(root, blocknr); |
2466 | if (tmp) { | 2459 | if (tmp) { |
2467 | /* first we do an atomic uptodate check */ | 2460 | /* first we do an atomic uptodate check */ |
2468 | if (btrfs_buffer_uptodate(tmp, gen, 1) > 0) { | 2461 | if (btrfs_buffer_uptodate(tmp, gen, 1) > 0) { |
@@ -2506,7 +2499,7 @@ read_block_for_search(struct btrfs_trans_handle *trans, | |||
2506 | btrfs_release_path(p); | 2499 | btrfs_release_path(p); |
2507 | 2500 | ||
2508 | ret = -EAGAIN; | 2501 | ret = -EAGAIN; |
2509 | tmp = read_tree_block(root, blocknr, blocksize, 0); | 2502 | tmp = read_tree_block(root, blocknr, 0); |
2510 | if (tmp) { | 2503 | if (tmp) { |
2511 | /* | 2504 | /* |
2512 | * If the read above didn't mark this buffer up to date, | 2505 | * If the read above didn't mark this buffer up to date, |
@@ -3360,9 +3353,8 @@ static noinline int insert_new_root(struct btrfs_trans_handle *trans, | |||
3360 | else | 3353 | else |
3361 | btrfs_node_key(lower, &lower_key, 0); | 3354 | btrfs_node_key(lower, &lower_key, 0); |
3362 | 3355 | ||
3363 | c = btrfs_alloc_free_block(trans, root, root->nodesize, 0, | 3356 | c = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, |
3364 | root->root_key.objectid, &lower_key, | 3357 | &lower_key, level, root->node->start, 0); |
3365 | level, root->node->start, 0); | ||
3366 | if (IS_ERR(c)) | 3358 | if (IS_ERR(c)) |
3367 | return PTR_ERR(c); | 3359 | return PTR_ERR(c); |
3368 | 3360 | ||
@@ -3500,9 +3492,8 @@ static noinline int split_node(struct btrfs_trans_handle *trans, | |||
3500 | mid = (c_nritems + 1) / 2; | 3492 | mid = (c_nritems + 1) / 2; |
3501 | btrfs_node_key(c, &disk_key, mid); | 3493 | btrfs_node_key(c, &disk_key, mid); |
3502 | 3494 | ||
3503 | split = btrfs_alloc_free_block(trans, root, root->nodesize, 0, | 3495 | split = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, |
3504 | root->root_key.objectid, | 3496 | &disk_key, level, c->start, 0); |
3505 | &disk_key, level, c->start, 0); | ||
3506 | if (IS_ERR(split)) | 3497 | if (IS_ERR(split)) |
3507 | return PTR_ERR(split); | 3498 | return PTR_ERR(split); |
3508 | 3499 | ||
@@ -4280,9 +4271,8 @@ again: | |||
4280 | else | 4271 | else |
4281 | btrfs_item_key(l, &disk_key, mid); | 4272 | btrfs_item_key(l, &disk_key, mid); |
4282 | 4273 | ||
4283 | right = btrfs_alloc_free_block(trans, root, root->nodesize, 0, | 4274 | right = btrfs_alloc_tree_block(trans, root, 0, root->root_key.objectid, |
4284 | root->root_key.objectid, | 4275 | &disk_key, 0, l->start, 0); |
4285 | &disk_key, 0, l->start, 0); | ||
4286 | if (IS_ERR(right)) | 4276 | if (IS_ERR(right)) |
4287 | return PTR_ERR(right); | 4277 | return PTR_ERR(right); |
4288 | 4278 | ||