extent-tree.c (4922f0920966c28d674b03479cdcb7f3939bfbbd) | extent-tree.c (7a1636089acfee7562fe79aff7d1b4c57869896d) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 2007 Oracle. All rights reserved. 4 */ 5 6#include <linux/sched.h> 7#include <linux/sched/signal.h> 8#include <linux/pagemap.h> --- 3261 unchanged lines hidden (view full) --- 3270 spin_unlock(&head->lock); 3271 3272out_delayed_unlock: 3273 spin_unlock(&delayed_refs->lock); 3274 return 0; 3275} 3276 3277void btrfs_free_tree_block(struct btrfs_trans_handle *trans, | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 2007 Oracle. All rights reserved. 4 */ 5 6#include <linux/sched.h> 7#include <linux/sched/signal.h> 8#include <linux/pagemap.h> --- 3261 unchanged lines hidden (view full) --- 3270 spin_unlock(&head->lock); 3271 3272out_delayed_unlock: 3273 spin_unlock(&delayed_refs->lock); 3274 return 0; 3275} 3276 3277void btrfs_free_tree_block(struct btrfs_trans_handle *trans, |
3278 struct btrfs_root *root, | 3278 u64 root_id, |
3279 struct extent_buffer *buf, 3280 u64 parent, int last_ref) 3281{ | 3279 struct extent_buffer *buf, 3280 u64 parent, int last_ref) 3281{ |
3282 struct btrfs_fs_info *fs_info = root->fs_info; | 3282 struct btrfs_fs_info *fs_info = trans->fs_info; |
3283 struct btrfs_ref generic_ref = { 0 }; 3284 int ret; 3285 3286 btrfs_init_generic_ref(&generic_ref, BTRFS_DROP_DELAYED_REF, 3287 buf->start, buf->len, parent); 3288 btrfs_init_tree_ref(&generic_ref, btrfs_header_level(buf), | 3283 struct btrfs_ref generic_ref = { 0 }; 3284 int ret; 3285 3286 btrfs_init_generic_ref(&generic_ref, BTRFS_DROP_DELAYED_REF, 3287 buf->start, buf->len, parent); 3288 btrfs_init_tree_ref(&generic_ref, btrfs_header_level(buf), |
3289 root->root_key.objectid, 0, false); | 3289 root_id, 0, false); |
3290 | 3290 |
3291 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { | 3291 if (root_id != BTRFS_TREE_LOG_OBJECTID) { |
3292 btrfs_ref_tree_mod(fs_info, &generic_ref); 3293 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, NULL); 3294 BUG_ON(ret); /* -ENOMEM */ 3295 } 3296 3297 if (last_ref && btrfs_header_generation(buf) == trans->transid) { 3298 struct btrfs_block_group *cache; 3299 bool must_pin = false; 3300 | 3292 btrfs_ref_tree_mod(fs_info, &generic_ref); 3293 ret = btrfs_add_delayed_tree_ref(trans, &generic_ref, NULL); 3294 BUG_ON(ret); /* -ENOMEM */ 3295 } 3296 3297 if (last_ref && btrfs_header_generation(buf) == trans->transid) { 3298 struct btrfs_block_group *cache; 3299 bool must_pin = false; 3300 |
3301 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { | 3301 if (root_id != BTRFS_TREE_LOG_OBJECTID) { |
3302 ret = check_ref_cleanup(trans, buf->start); 3303 if (!ret) { 3304 btrfs_redirty_list_add(trans->transaction, buf); 3305 goto out; 3306 } 3307 } 3308 3309 cache = btrfs_lookup_block_group(fs_info, buf->start); --- 2157 unchanged lines hidden (view full) --- 5467 } else { 5468 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) 5469 parent = path->nodes[level + 1]->start; 5470 else if (root->root_key.objectid != 5471 btrfs_header_owner(path->nodes[level + 1])) 5472 goto owner_mismatch; 5473 } 5474 | 3302 ret = check_ref_cleanup(trans, buf->start); 3303 if (!ret) { 3304 btrfs_redirty_list_add(trans->transaction, buf); 3305 goto out; 3306 } 3307 } 3308 3309 cache = btrfs_lookup_block_group(fs_info, buf->start); --- 2157 unchanged lines hidden (view full) --- 5467 } else { 5468 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) 5469 parent = path->nodes[level + 1]->start; 5470 else if (root->root_key.objectid != 5471 btrfs_header_owner(path->nodes[level + 1])) 5472 goto owner_mismatch; 5473 } 5474 |
5475 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); | 5475 btrfs_free_tree_block(trans, btrfs_root_id(root), eb, parent, 5476 wc->refs[level] == 1); |
5476out: 5477 wc->refs[level] = 0; 5478 wc->flags[level] = 0; 5479 return 0; 5480 5481owner_mismatch: 5482 btrfs_err_rl(fs_info, "unexpected tree owner, have %llu expect %llu", 5483 btrfs_header_owner(eb), root->root_key.objectid); --- 651 unchanged lines hidden --- | 5477out: 5478 wc->refs[level] = 0; 5479 wc->flags[level] = 0; 5480 return 0; 5481 5482owner_mismatch: 5483 btrfs_err_rl(fs_info, "unexpected tree owner, have %llu expect %llu", 5484 btrfs_header_owner(eb), root->root_key.objectid); --- 651 unchanged lines hidden --- |