relocation.c (584fb12187f087f4909f74fa91dbb61856107684) | relocation.c (b1818dab9bda1da8f3ea5a13230b5d91ae964f00) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 2009 Oracle. All rights reserved. 4 */ 5 6#include <linux/sched.h> 7#include <linux/pagemap.h> 8#include <linux/writeback.h> --- 194 unchanged lines hidden (view full) --- 203 ASSERT(list_empty(&cache->useless_node)); 204 ASSERT(list_empty(&cache->changed)); 205 ASSERT(list_empty(&cache->detached)); 206 ASSERT(RB_EMPTY_ROOT(&cache->rb_root)); 207 ASSERT(!cache->nr_nodes); 208 ASSERT(!cache->nr_edges); 209} 210 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 2009 Oracle. All rights reserved. 4 */ 5 6#include <linux/sched.h> 7#include <linux/pagemap.h> 8#include <linux/writeback.h> --- 194 unchanged lines hidden (view full) --- 203 ASSERT(list_empty(&cache->useless_node)); 204 ASSERT(list_empty(&cache->changed)); 205 ASSERT(list_empty(&cache->detached)); 206 ASSERT(RB_EMPTY_ROOT(&cache->rb_root)); 207 ASSERT(!cache->nr_nodes); 208 ASSERT(!cache->nr_edges); 209} 210 |
211static struct btrfs_backref_node *alloc_backref_node( 212 struct btrfs_backref_cache *cache, u64 bytenr, int level) 213{ 214 struct btrfs_backref_node *node; 215 216 ASSERT(level >= 0 && level < BTRFS_MAX_LEVEL); 217 node = kzalloc(sizeof(*node), GFP_NOFS); 218 if (!node) 219 return node; 220 221 INIT_LIST_HEAD(&node->list); 222 INIT_LIST_HEAD(&node->upper); 223 INIT_LIST_HEAD(&node->lower); 224 RB_CLEAR_NODE(&node->rb_node); 225 cache->nr_nodes++; 226 node->level = level; 227 node->bytenr = bytenr; 228 229 return node; 230} 231 | |
232static void free_backref_node(struct btrfs_backref_cache *cache, 233 struct btrfs_backref_node *node) 234{ 235 if (node) { 236 cache->nr_nodes--; 237 btrfs_put_root(node->root); 238 kfree(node); 239 } --- 364 unchanged lines hidden (view full) --- 604 605 edge = alloc_backref_edge(cache); 606 if (!edge) 607 return -ENOMEM; 608 609 rb_node = rb_simple_search(&cache->rb_root, ref_key->offset); 610 if (!rb_node) { 611 /* Parent node not yet cached */ | 211static void free_backref_node(struct btrfs_backref_cache *cache, 212 struct btrfs_backref_node *node) 213{ 214 if (node) { 215 cache->nr_nodes--; 216 btrfs_put_root(node->root); 217 kfree(node); 218 } --- 364 unchanged lines hidden (view full) --- 583 584 edge = alloc_backref_edge(cache); 585 if (!edge) 586 return -ENOMEM; 587 588 rb_node = rb_simple_search(&cache->rb_root, ref_key->offset); 589 if (!rb_node) { 590 /* Parent node not yet cached */ |
612 upper = alloc_backref_node(cache, ref_key->offset, | 591 upper = btrfs_backref_alloc_node(cache, ref_key->offset, |
613 cur->level + 1); 614 if (!upper) { 615 free_backref_edge(cache, edge); 616 return -ENOMEM; 617 } 618 619 /* 620 * Backrefs for the upper level block isn't cached, add the --- 103 unchanged lines hidden (view full) --- 724 btrfs_put_root(root); 725 ret = -ENOMEM; 726 goto out; 727 } 728 729 eb = path->nodes[level]; 730 rb_node = rb_simple_search(&cache->rb_root, eb->start); 731 if (!rb_node) { | 592 cur->level + 1); 593 if (!upper) { 594 free_backref_edge(cache, edge); 595 return -ENOMEM; 596 } 597 598 /* 599 * Backrefs for the upper level block isn't cached, add the --- 103 unchanged lines hidden (view full) --- 703 btrfs_put_root(root); 704 ret = -ENOMEM; 705 goto out; 706 } 707 708 eb = path->nodes[level]; 709 rb_node = rb_simple_search(&cache->rb_root, eb->start); 710 if (!rb_node) { |
732 upper = alloc_backref_node(cache, eb->start, 733 lower->level + 1); | 711 upper = btrfs_backref_alloc_node(cache, eb->start, 712 lower->level + 1); |
734 if (!upper) { 735 btrfs_put_root(root); 736 free_backref_edge(cache, edge); 737 ret = -ENOMEM; 738 goto out; 739 } 740 upper->owner = btrfs_header_owner(eb); 741 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state)) --- 388 unchanged lines hidden (view full) --- 1130 if (!iter) 1131 return ERR_PTR(-ENOMEM); 1132 path = btrfs_alloc_path(); 1133 if (!path) { 1134 err = -ENOMEM; 1135 goto out; 1136 } 1137 | 713 if (!upper) { 714 btrfs_put_root(root); 715 free_backref_edge(cache, edge); 716 ret = -ENOMEM; 717 goto out; 718 } 719 upper->owner = btrfs_header_owner(eb); 720 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state)) --- 388 unchanged lines hidden (view full) --- 1109 if (!iter) 1110 return ERR_PTR(-ENOMEM); 1111 path = btrfs_alloc_path(); 1112 if (!path) { 1113 err = -ENOMEM; 1114 goto out; 1115 } 1116 |
1138 node = alloc_backref_node(cache, bytenr, level); | 1117 node = btrfs_backref_alloc_node(cache, bytenr, level); |
1139 if (!node) { 1140 err = -ENOMEM; 1141 goto out; 1142 } 1143 1144 node->lowest = 1; 1145 cur = node; 1146 --- 120 unchanged lines hidden (view full) --- 1267 rb_node); 1268 BUG_ON(node->detached); 1269 } 1270 } 1271 1272 if (!node) 1273 return 0; 1274 | 1118 if (!node) { 1119 err = -ENOMEM; 1120 goto out; 1121 } 1122 1123 node->lowest = 1; 1124 cur = node; 1125 --- 120 unchanged lines hidden (view full) --- 1246 rb_node); 1247 BUG_ON(node->detached); 1248 } 1249 } 1250 1251 if (!node) 1252 return 0; 1253 |
1275 new_node = alloc_backref_node(cache, dest->node->start, node->level); | 1254 new_node = btrfs_backref_alloc_node(cache, dest->node->start, 1255 node->level); |
1276 if (!new_node) 1277 return -ENOMEM; 1278 1279 new_node->lowest = node->lowest; 1280 new_node->checked = 1; 1281 new_node->root = btrfs_grab_root(dest); 1282 ASSERT(new_node->root); 1283 --- 3475 unchanged lines hidden --- | 1256 if (!new_node) 1257 return -ENOMEM; 1258 1259 new_node->lowest = node->lowest; 1260 new_node->checked = 1; 1261 new_node->root = btrfs_grab_root(dest); 1262 ASSERT(new_node->root); 1263 --- 3475 unchanged lines hidden --- |