aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/ctree.c
diff options
context:
space:
mode:
authorChris Mason <clm@fb.com>2014-10-04 12:57:14 -0400
committerChris Mason <clm@fb.com>2014-10-04 12:57:14 -0400
commit27b19cc8864e206c4203041892b0f706f044a0f1 (patch)
treef724dd77efa379da881fba7f46075af17a728bf9 /fs/btrfs/ctree.c
parentbbf65cf0b5b67843ca094df01019222b85af2183 (diff)
parent4d75f8a9c87b843c8ded15b82b8d137b9724cccc (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.c54
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