1 /* 2 * Copyright (C) 2011 STRATO. All rights reserved. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public 6 * License v2 as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public 14 * License along with this program; if not, write to the 15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, 16 * Boston, MA 021110-1307, USA. 17 */ 18 19 #include <linux/vmalloc.h> 20 #include "ctree.h" 21 #include "disk-io.h" 22 #include "backref.h" 23 #include "ulist.h" 24 #include "transaction.h" 25 #include "delayed-ref.h" 26 #include "locking.h" 27 28 struct extent_inode_elem { 29 u64 inum; 30 u64 offset; 31 struct extent_inode_elem *next; 32 }; 33 34 static int check_extent_in_eb(struct btrfs_key *key, struct extent_buffer *eb, 35 struct btrfs_file_extent_item *fi, 36 u64 extent_item_pos, 37 struct extent_inode_elem **eie) 38 { 39 u64 offset = 0; 40 struct extent_inode_elem *e; 41 42 if (!btrfs_file_extent_compression(eb, fi) && 43 !btrfs_file_extent_encryption(eb, fi) && 44 !btrfs_file_extent_other_encoding(eb, fi)) { 45 u64 data_offset; 46 u64 data_len; 47 48 data_offset = btrfs_file_extent_offset(eb, fi); 49 data_len = btrfs_file_extent_num_bytes(eb, fi); 50 51 if (extent_item_pos < data_offset || 52 extent_item_pos >= data_offset + data_len) 53 return 1; 54 offset = extent_item_pos - data_offset; 55 } 56 57 e = kmalloc(sizeof(*e), GFP_NOFS); 58 if (!e) 59 return -ENOMEM; 60 61 e->next = *eie; 62 e->inum = key->objectid; 63 e->offset = key->offset + offset; 64 *eie = e; 65 66 return 0; 67 } 68 69 static int find_extent_in_eb(struct extent_buffer *eb, u64 wanted_disk_byte, 70 u64 extent_item_pos, 71 struct extent_inode_elem **eie) 72 { 73 u64 disk_byte; 74 struct btrfs_key key; 75 struct btrfs_file_extent_item *fi; 76 int slot; 77 int nritems; 78 int extent_type; 79 int ret; 80 81 /* 82 * from the shared data ref, we only have the leaf but we need 83 * the key. thus, we must look into all items and see that we 84 * find one (some) with a reference to our extent item. 85 */ 86 nritems = btrfs_header_nritems(eb); 87 for (slot = 0; slot < nritems; ++slot) { 88 btrfs_item_key_to_cpu(eb, &key, slot); 89 if (key.type != BTRFS_EXTENT_DATA_KEY) 90 continue; 91 fi = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); 92 extent_type = btrfs_file_extent_type(eb, fi); 93 if (extent_type == BTRFS_FILE_EXTENT_INLINE) 94 continue; 95 /* don't skip BTRFS_FILE_EXTENT_PREALLOC, we can handle that */ 96 disk_byte = btrfs_file_extent_disk_bytenr(eb, fi); 97 if (disk_byte != wanted_disk_byte) 98 continue; 99 100 ret = check_extent_in_eb(&key, eb, fi, extent_item_pos, eie); 101 if (ret < 0) 102 return ret; 103 } 104 105 return 0; 106 } 107 108 /* 109 * this structure records all encountered refs on the way up to the root 110 */ 111 struct __prelim_ref { 112 struct list_head list; 113 u64 root_id; 114 struct btrfs_key key_for_search; 115 int level; 116 int count; 117 struct extent_inode_elem *inode_list; 118 u64 parent; 119 u64 wanted_disk_byte; 120 }; 121 122 /* 123 * the rules for all callers of this function are: 124 * - obtaining the parent is the goal 125 * - if you add a key, you must know that it is a correct key 126 * - if you cannot add the parent or a correct key, then we will look into the 127 * block later to set a correct key 128 * 129 * delayed refs 130 * ============ 131 * backref type | shared | indirect | shared | indirect 132 * information | tree | tree | data | data 133 * --------------------+--------+----------+--------+---------- 134 * parent logical | y | - | - | - 135 * key to resolve | - | y | y | y 136 * tree block logical | - | - | - | - 137 * root for resolving | y | y | y | y 138 * 139 * - column 1: we've the parent -> done 140 * - column 2, 3, 4: we use the key to find the parent 141 * 142 * on disk refs (inline or keyed) 143 * ============================== 144 * backref type | shared | indirect | shared | indirect 145 * information | tree | tree | data | data 146 * --------------------+--------+----------+--------+---------- 147 * parent logical | y | - | y | - 148 * key to resolve | - | - | - | y 149 * tree block logical | y | y | y | y 150 * root for resolving | - | y | y | y 151 * 152 * - column 1, 3: we've the parent -> done 153 * - column 2: we take the first key from the block to find the parent 154 * (see __add_missing_keys) 155 * - column 4: we use the key to find the parent 156 * 157 * additional information that's available but not required to find the parent 158 * block might help in merging entries to gain some speed. 159 */ 160 161 static int __add_prelim_ref(struct list_head *head, u64 root_id, 162 struct btrfs_key *key, int level, 163 u64 parent, u64 wanted_disk_byte, int count) 164 { 165 struct __prelim_ref *ref; 166 167 /* in case we're adding delayed refs, we're holding the refs spinlock */ 168 ref = kmalloc(sizeof(*ref), GFP_ATOMIC); 169 if (!ref) 170 return -ENOMEM; 171 172 ref->root_id = root_id; 173 if (key) 174 ref->key_for_search = *key; 175 else 176 memset(&ref->key_for_search, 0, sizeof(ref->key_for_search)); 177 178 ref->inode_list = NULL; 179 ref->level = level; 180 ref->count = count; 181 ref->parent = parent; 182 ref->wanted_disk_byte = wanted_disk_byte; 183 list_add_tail(&ref->list, head); 184 185 return 0; 186 } 187 188 static int add_all_parents(struct btrfs_root *root, struct btrfs_path *path, 189 struct ulist *parents, int level, 190 struct btrfs_key *key_for_search, u64 time_seq, 191 u64 wanted_disk_byte, 192 const u64 *extent_item_pos) 193 { 194 int ret = 0; 195 int slot; 196 struct extent_buffer *eb; 197 struct btrfs_key key; 198 struct btrfs_file_extent_item *fi; 199 struct extent_inode_elem *eie = NULL, *old = NULL; 200 u64 disk_byte; 201 202 if (level != 0) { 203 eb = path->nodes[level]; 204 ret = ulist_add(parents, eb->start, 0, GFP_NOFS); 205 if (ret < 0) 206 return ret; 207 return 0; 208 } 209 210 /* 211 * We normally enter this function with the path already pointing to 212 * the first item to check. But sometimes, we may enter it with 213 * slot==nritems. In that case, go to the next leaf before we continue. 214 */ 215 if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) 216 ret = btrfs_next_old_leaf(root, path, time_seq); 217 218 while (!ret) { 219 eb = path->nodes[0]; 220 slot = path->slots[0]; 221 222 btrfs_item_key_to_cpu(eb, &key, slot); 223 224 if (key.objectid != key_for_search->objectid || 225 key.type != BTRFS_EXTENT_DATA_KEY) 226 break; 227 228 fi = btrfs_item_ptr(eb, slot, struct btrfs_file_extent_item); 229 disk_byte = btrfs_file_extent_disk_bytenr(eb, fi); 230 231 if (disk_byte == wanted_disk_byte) { 232 eie = NULL; 233 old = NULL; 234 if (extent_item_pos) { 235 ret = check_extent_in_eb(&key, eb, fi, 236 *extent_item_pos, 237 &eie); 238 if (ret < 0) 239 break; 240 } 241 if (ret > 0) 242 goto next; 243 ret = ulist_add_merge(parents, eb->start, 244 (uintptr_t)eie, 245 (u64 *)&old, GFP_NOFS); 246 if (ret < 0) 247 break; 248 if (!ret && extent_item_pos) { 249 while (old->next) 250 old = old->next; 251 old->next = eie; 252 } 253 } 254 next: 255 ret = btrfs_next_old_item(root, path, time_seq); 256 } 257 258 if (ret > 0) 259 ret = 0; 260 return ret; 261 } 262 263 /* 264 * resolve an indirect backref in the form (root_id, key, level) 265 * to a logical address 266 */ 267 static int __resolve_indirect_ref(struct btrfs_fs_info *fs_info, 268 struct btrfs_path *path, u64 time_seq, 269 struct __prelim_ref *ref, 270 struct ulist *parents, 271 const u64 *extent_item_pos) 272 { 273 struct btrfs_root *root; 274 struct btrfs_key root_key; 275 struct extent_buffer *eb; 276 int ret = 0; 277 int root_level; 278 int level = ref->level; 279 280 root_key.objectid = ref->root_id; 281 root_key.type = BTRFS_ROOT_ITEM_KEY; 282 root_key.offset = (u64)-1; 283 root = btrfs_read_fs_root_no_name(fs_info, &root_key); 284 if (IS_ERR(root)) { 285 ret = PTR_ERR(root); 286 goto out; 287 } 288 289 root_level = btrfs_old_root_level(root, time_seq); 290 291 if (root_level + 1 == level) 292 goto out; 293 294 path->lowest_level = level; 295 ret = btrfs_search_old_slot(root, &ref->key_for_search, path, time_seq); 296 pr_debug("search slot in root %llu (level %d, ref count %d) returned " 297 "%d for key (%llu %u %llu)\n", 298 ref->root_id, level, ref->count, ret, 299 ref->key_for_search.objectid, ref->key_for_search.type, 300 ref->key_for_search.offset); 301 if (ret < 0) 302 goto out; 303 304 eb = path->nodes[level]; 305 while (!eb) { 306 if (!level) { 307 WARN_ON(1); 308 ret = 1; 309 goto out; 310 } 311 level--; 312 eb = path->nodes[level]; 313 } 314 315 ret = add_all_parents(root, path, parents, level, &ref->key_for_search, 316 time_seq, ref->wanted_disk_byte, 317 extent_item_pos); 318 out: 319 path->lowest_level = 0; 320 btrfs_release_path(path); 321 return ret; 322 } 323 324 /* 325 * resolve all indirect backrefs from the list 326 */ 327 static int __resolve_indirect_refs(struct btrfs_fs_info *fs_info, 328 struct btrfs_path *path, u64 time_seq, 329 struct list_head *head, 330 const u64 *extent_item_pos) 331 { 332 int err; 333 int ret = 0; 334 struct __prelim_ref *ref; 335 struct __prelim_ref *ref_safe; 336 struct __prelim_ref *new_ref; 337 struct ulist *parents; 338 struct ulist_node *node; 339 struct ulist_iterator uiter; 340 341 parents = ulist_alloc(GFP_NOFS); 342 if (!parents) 343 return -ENOMEM; 344 345 /* 346 * _safe allows us to insert directly after the current item without 347 * iterating over the newly inserted items. 348 * we're also allowed to re-assign ref during iteration. 349 */ 350 list_for_each_entry_safe(ref, ref_safe, head, list) { 351 if (ref->parent) /* already direct */ 352 continue; 353 if (ref->count == 0) 354 continue; 355 err = __resolve_indirect_ref(fs_info, path, time_seq, ref, 356 parents, extent_item_pos); 357 if (err == -ENOMEM) 358 goto out; 359 if (err) 360 continue; 361 362 /* we put the first parent into the ref at hand */ 363 ULIST_ITER_INIT(&uiter); 364 node = ulist_next(parents, &uiter); 365 ref->parent = node ? node->val : 0; 366 ref->inode_list = node ? 367 (struct extent_inode_elem *)(uintptr_t)node->aux : NULL; 368 369 /* additional parents require new refs being added here */ 370 while ((node = ulist_next(parents, &uiter))) { 371 new_ref = kmalloc(sizeof(*new_ref), GFP_NOFS); 372 if (!new_ref) { 373 ret = -ENOMEM; 374 goto out; 375 } 376 memcpy(new_ref, ref, sizeof(*ref)); 377 new_ref->parent = node->val; 378 new_ref->inode_list = (struct extent_inode_elem *) 379 (uintptr_t)node->aux; 380 list_add(&new_ref->list, &ref->list); 381 } 382 ulist_reinit(parents); 383 } 384 out: 385 ulist_free(parents); 386 return ret; 387 } 388 389 static inline int ref_for_same_block(struct __prelim_ref *ref1, 390 struct __prelim_ref *ref2) 391 { 392 if (ref1->level != ref2->level) 393 return 0; 394 if (ref1->root_id != ref2->root_id) 395 return 0; 396 if (ref1->key_for_search.type != ref2->key_for_search.type) 397 return 0; 398 if (ref1->key_for_search.objectid != ref2->key_for_search.objectid) 399 return 0; 400 if (ref1->key_for_search.offset != ref2->key_for_search.offset) 401 return 0; 402 if (ref1->parent != ref2->parent) 403 return 0; 404 405 return 1; 406 } 407 408 /* 409 * read tree blocks and add keys where required. 410 */ 411 static int __add_missing_keys(struct btrfs_fs_info *fs_info, 412 struct list_head *head) 413 { 414 struct list_head *pos; 415 struct extent_buffer *eb; 416 417 list_for_each(pos, head) { 418 struct __prelim_ref *ref; 419 ref = list_entry(pos, struct __prelim_ref, list); 420 421 if (ref->parent) 422 continue; 423 if (ref->key_for_search.type) 424 continue; 425 BUG_ON(!ref->wanted_disk_byte); 426 eb = read_tree_block(fs_info->tree_root, ref->wanted_disk_byte, 427 fs_info->tree_root->leafsize, 0); 428 if (!eb || !extent_buffer_uptodate(eb)) { 429 free_extent_buffer(eb); 430 return -EIO; 431 } 432 btrfs_tree_read_lock(eb); 433 if (btrfs_header_level(eb) == 0) 434 btrfs_item_key_to_cpu(eb, &ref->key_for_search, 0); 435 else 436 btrfs_node_key_to_cpu(eb, &ref->key_for_search, 0); 437 btrfs_tree_read_unlock(eb); 438 free_extent_buffer(eb); 439 } 440 return 0; 441 } 442 443 /* 444 * merge two lists of backrefs and adjust counts accordingly 445 * 446 * mode = 1: merge identical keys, if key is set 447 * FIXME: if we add more keys in __add_prelim_ref, we can merge more here. 448 * additionally, we could even add a key range for the blocks we 449 * looked into to merge even more (-> replace unresolved refs by those 450 * having a parent). 451 * mode = 2: merge identical parents 452 */ 453 static void __merge_refs(struct list_head *head, int mode) 454 { 455 struct list_head *pos1; 456 457 list_for_each(pos1, head) { 458 struct list_head *n2; 459 struct list_head *pos2; 460 struct __prelim_ref *ref1; 461 462 ref1 = list_entry(pos1, struct __prelim_ref, list); 463 464 for (pos2 = pos1->next, n2 = pos2->next; pos2 != head; 465 pos2 = n2, n2 = pos2->next) { 466 struct __prelim_ref *ref2; 467 struct __prelim_ref *xchg; 468 struct extent_inode_elem *eie; 469 470 ref2 = list_entry(pos2, struct __prelim_ref, list); 471 472 if (mode == 1) { 473 if (!ref_for_same_block(ref1, ref2)) 474 continue; 475 if (!ref1->parent && ref2->parent) { 476 xchg = ref1; 477 ref1 = ref2; 478 ref2 = xchg; 479 } 480 } else { 481 if (ref1->parent != ref2->parent) 482 continue; 483 } 484 485 eie = ref1->inode_list; 486 while (eie && eie->next) 487 eie = eie->next; 488 if (eie) 489 eie->next = ref2->inode_list; 490 else 491 ref1->inode_list = ref2->inode_list; 492 ref1->count += ref2->count; 493 494 list_del(&ref2->list); 495 kfree(ref2); 496 } 497 498 } 499 } 500 501 /* 502 * add all currently queued delayed refs from this head whose seq nr is 503 * smaller or equal that seq to the list 504 */ 505 static int __add_delayed_refs(struct btrfs_delayed_ref_head *head, u64 seq, 506 struct list_head *prefs) 507 { 508 struct btrfs_delayed_extent_op *extent_op = head->extent_op; 509 struct rb_node *n = &head->node.rb_node; 510 struct btrfs_key key; 511 struct btrfs_key op_key = {0}; 512 int sgn; 513 int ret = 0; 514 515 if (extent_op && extent_op->update_key) 516 btrfs_disk_key_to_cpu(&op_key, &extent_op->key); 517 518 while ((n = rb_prev(n))) { 519 struct btrfs_delayed_ref_node *node; 520 node = rb_entry(n, struct btrfs_delayed_ref_node, 521 rb_node); 522 if (node->bytenr != head->node.bytenr) 523 break; 524 WARN_ON(node->is_head); 525 526 if (node->seq > seq) 527 continue; 528 529 switch (node->action) { 530 case BTRFS_ADD_DELAYED_EXTENT: 531 case BTRFS_UPDATE_DELAYED_HEAD: 532 WARN_ON(1); 533 continue; 534 case BTRFS_ADD_DELAYED_REF: 535 sgn = 1; 536 break; 537 case BTRFS_DROP_DELAYED_REF: 538 sgn = -1; 539 break; 540 default: 541 BUG_ON(1); 542 } 543 switch (node->type) { 544 case BTRFS_TREE_BLOCK_REF_KEY: { 545 struct btrfs_delayed_tree_ref *ref; 546 547 ref = btrfs_delayed_node_to_tree_ref(node); 548 ret = __add_prelim_ref(prefs, ref->root, &op_key, 549 ref->level + 1, 0, node->bytenr, 550 node->ref_mod * sgn); 551 break; 552 } 553 case BTRFS_SHARED_BLOCK_REF_KEY: { 554 struct btrfs_delayed_tree_ref *ref; 555 556 ref = btrfs_delayed_node_to_tree_ref(node); 557 ret = __add_prelim_ref(prefs, ref->root, NULL, 558 ref->level + 1, ref->parent, 559 node->bytenr, 560 node->ref_mod * sgn); 561 break; 562 } 563 case BTRFS_EXTENT_DATA_REF_KEY: { 564 struct btrfs_delayed_data_ref *ref; 565 ref = btrfs_delayed_node_to_data_ref(node); 566 567 key.objectid = ref->objectid; 568 key.type = BTRFS_EXTENT_DATA_KEY; 569 key.offset = ref->offset; 570 ret = __add_prelim_ref(prefs, ref->root, &key, 0, 0, 571 node->bytenr, 572 node->ref_mod * sgn); 573 break; 574 } 575 case BTRFS_SHARED_DATA_REF_KEY: { 576 struct btrfs_delayed_data_ref *ref; 577 578 ref = btrfs_delayed_node_to_data_ref(node); 579 580 key.objectid = ref->objectid; 581 key.type = BTRFS_EXTENT_DATA_KEY; 582 key.offset = ref->offset; 583 ret = __add_prelim_ref(prefs, ref->root, &key, 0, 584 ref->parent, node->bytenr, 585 node->ref_mod * sgn); 586 break; 587 } 588 default: 589 WARN_ON(1); 590 } 591 if (ret) 592 return ret; 593 } 594 595 return 0; 596 } 597 598 /* 599 * add all inline backrefs for bytenr to the list 600 */ 601 static int __add_inline_refs(struct btrfs_fs_info *fs_info, 602 struct btrfs_path *path, u64 bytenr, 603 int *info_level, struct list_head *prefs) 604 { 605 int ret = 0; 606 int slot; 607 struct extent_buffer *leaf; 608 struct btrfs_key key; 609 struct btrfs_key found_key; 610 unsigned long ptr; 611 unsigned long end; 612 struct btrfs_extent_item *ei; 613 u64 flags; 614 u64 item_size; 615 616 /* 617 * enumerate all inline refs 618 */ 619 leaf = path->nodes[0]; 620 slot = path->slots[0]; 621 622 item_size = btrfs_item_size_nr(leaf, slot); 623 BUG_ON(item_size < sizeof(*ei)); 624 625 ei = btrfs_item_ptr(leaf, slot, struct btrfs_extent_item); 626 flags = btrfs_extent_flags(leaf, ei); 627 btrfs_item_key_to_cpu(leaf, &found_key, slot); 628 629 ptr = (unsigned long)(ei + 1); 630 end = (unsigned long)ei + item_size; 631 632 if (found_key.type == BTRFS_EXTENT_ITEM_KEY && 633 flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) { 634 struct btrfs_tree_block_info *info; 635 636 info = (struct btrfs_tree_block_info *)ptr; 637 *info_level = btrfs_tree_block_level(leaf, info); 638 ptr += sizeof(struct btrfs_tree_block_info); 639 BUG_ON(ptr > end); 640 } else if (found_key.type == BTRFS_METADATA_ITEM_KEY) { 641 *info_level = found_key.offset; 642 } else { 643 BUG_ON(!(flags & BTRFS_EXTENT_FLAG_DATA)); 644 } 645 646 while (ptr < end) { 647 struct btrfs_extent_inline_ref *iref; 648 u64 offset; 649 int type; 650 651 iref = (struct btrfs_extent_inline_ref *)ptr; 652 type = btrfs_extent_inline_ref_type(leaf, iref); 653 offset = btrfs_extent_inline_ref_offset(leaf, iref); 654 655 switch (type) { 656 case BTRFS_SHARED_BLOCK_REF_KEY: 657 ret = __add_prelim_ref(prefs, 0, NULL, 658 *info_level + 1, offset, 659 bytenr, 1); 660 break; 661 case BTRFS_SHARED_DATA_REF_KEY: { 662 struct btrfs_shared_data_ref *sdref; 663 int count; 664 665 sdref = (struct btrfs_shared_data_ref *)(iref + 1); 666 count = btrfs_shared_data_ref_count(leaf, sdref); 667 ret = __add_prelim_ref(prefs, 0, NULL, 0, offset, 668 bytenr, count); 669 break; 670 } 671 case BTRFS_TREE_BLOCK_REF_KEY: 672 ret = __add_prelim_ref(prefs, offset, NULL, 673 *info_level + 1, 0, 674 bytenr, 1); 675 break; 676 case BTRFS_EXTENT_DATA_REF_KEY: { 677 struct btrfs_extent_data_ref *dref; 678 int count; 679 u64 root; 680 681 dref = (struct btrfs_extent_data_ref *)(&iref->offset); 682 count = btrfs_extent_data_ref_count(leaf, dref); 683 key.objectid = btrfs_extent_data_ref_objectid(leaf, 684 dref); 685 key.type = BTRFS_EXTENT_DATA_KEY; 686 key.offset = btrfs_extent_data_ref_offset(leaf, dref); 687 root = btrfs_extent_data_ref_root(leaf, dref); 688 ret = __add_prelim_ref(prefs, root, &key, 0, 0, 689 bytenr, count); 690 break; 691 } 692 default: 693 WARN_ON(1); 694 } 695 if (ret) 696 return ret; 697 ptr += btrfs_extent_inline_ref_size(type); 698 } 699 700 return 0; 701 } 702 703 /* 704 * add all non-inline backrefs for bytenr to the list 705 */ 706 static int __add_keyed_refs(struct btrfs_fs_info *fs_info, 707 struct btrfs_path *path, u64 bytenr, 708 int info_level, struct list_head *prefs) 709 { 710 struct btrfs_root *extent_root = fs_info->extent_root; 711 int ret; 712 int slot; 713 struct extent_buffer *leaf; 714 struct btrfs_key key; 715 716 while (1) { 717 ret = btrfs_next_item(extent_root, path); 718 if (ret < 0) 719 break; 720 if (ret) { 721 ret = 0; 722 break; 723 } 724 725 slot = path->slots[0]; 726 leaf = path->nodes[0]; 727 btrfs_item_key_to_cpu(leaf, &key, slot); 728 729 if (key.objectid != bytenr) 730 break; 731 if (key.type < BTRFS_TREE_BLOCK_REF_KEY) 732 continue; 733 if (key.type > BTRFS_SHARED_DATA_REF_KEY) 734 break; 735 736 switch (key.type) { 737 case BTRFS_SHARED_BLOCK_REF_KEY: 738 ret = __add_prelim_ref(prefs, 0, NULL, 739 info_level + 1, key.offset, 740 bytenr, 1); 741 break; 742 case BTRFS_SHARED_DATA_REF_KEY: { 743 struct btrfs_shared_data_ref *sdref; 744 int count; 745 746 sdref = btrfs_item_ptr(leaf, slot, 747 struct btrfs_shared_data_ref); 748 count = btrfs_shared_data_ref_count(leaf, sdref); 749 ret = __add_prelim_ref(prefs, 0, NULL, 0, key.offset, 750 bytenr, count); 751 break; 752 } 753 case BTRFS_TREE_BLOCK_REF_KEY: 754 ret = __add_prelim_ref(prefs, key.offset, NULL, 755 info_level + 1, 0, 756 bytenr, 1); 757 break; 758 case BTRFS_EXTENT_DATA_REF_KEY: { 759 struct btrfs_extent_data_ref *dref; 760 int count; 761 u64 root; 762 763 dref = btrfs_item_ptr(leaf, slot, 764 struct btrfs_extent_data_ref); 765 count = btrfs_extent_data_ref_count(leaf, dref); 766 key.objectid = btrfs_extent_data_ref_objectid(leaf, 767 dref); 768 key.type = BTRFS_EXTENT_DATA_KEY; 769 key.offset = btrfs_extent_data_ref_offset(leaf, dref); 770 root = btrfs_extent_data_ref_root(leaf, dref); 771 ret = __add_prelim_ref(prefs, root, &key, 0, 0, 772 bytenr, count); 773 break; 774 } 775 default: 776 WARN_ON(1); 777 } 778 if (ret) 779 return ret; 780 781 } 782 783 return ret; 784 } 785 786 /* 787 * this adds all existing backrefs (inline backrefs, backrefs and delayed 788 * refs) for the given bytenr to the refs list, merges duplicates and resolves 789 * indirect refs to their parent bytenr. 790 * When roots are found, they're added to the roots list 791 * 792 * FIXME some caching might speed things up 793 */ 794 static int find_parent_nodes(struct btrfs_trans_handle *trans, 795 struct btrfs_fs_info *fs_info, u64 bytenr, 796 u64 time_seq, struct ulist *refs, 797 struct ulist *roots, const u64 *extent_item_pos) 798 { 799 struct btrfs_key key; 800 struct btrfs_path *path; 801 struct btrfs_delayed_ref_root *delayed_refs = NULL; 802 struct btrfs_delayed_ref_head *head; 803 int info_level = 0; 804 int ret; 805 struct list_head prefs_delayed; 806 struct list_head prefs; 807 struct __prelim_ref *ref; 808 809 INIT_LIST_HEAD(&prefs); 810 INIT_LIST_HEAD(&prefs_delayed); 811 812 key.objectid = bytenr; 813 key.offset = (u64)-1; 814 if (btrfs_fs_incompat(fs_info, SKINNY_METADATA)) 815 key.type = BTRFS_METADATA_ITEM_KEY; 816 else 817 key.type = BTRFS_EXTENT_ITEM_KEY; 818 819 path = btrfs_alloc_path(); 820 if (!path) 821 return -ENOMEM; 822 if (!trans) 823 path->search_commit_root = 1; 824 825 /* 826 * grab both a lock on the path and a lock on the delayed ref head. 827 * We need both to get a consistent picture of how the refs look 828 * at a specified point in time 829 */ 830 again: 831 head = NULL; 832 833 ret = btrfs_search_slot(trans, fs_info->extent_root, &key, path, 0, 0); 834 if (ret < 0) 835 goto out; 836 BUG_ON(ret == 0); 837 838 if (trans) { 839 /* 840 * look if there are updates for this ref queued and lock the 841 * head 842 */ 843 delayed_refs = &trans->transaction->delayed_refs; 844 spin_lock(&delayed_refs->lock); 845 head = btrfs_find_delayed_ref_head(trans, bytenr); 846 if (head) { 847 if (!mutex_trylock(&head->mutex)) { 848 atomic_inc(&head->node.refs); 849 spin_unlock(&delayed_refs->lock); 850 851 btrfs_release_path(path); 852 853 /* 854 * Mutex was contended, block until it's 855 * released and try again 856 */ 857 mutex_lock(&head->mutex); 858 mutex_unlock(&head->mutex); 859 btrfs_put_delayed_ref(&head->node); 860 goto again; 861 } 862 ret = __add_delayed_refs(head, time_seq, 863 &prefs_delayed); 864 mutex_unlock(&head->mutex); 865 if (ret) { 866 spin_unlock(&delayed_refs->lock); 867 goto out; 868 } 869 } 870 spin_unlock(&delayed_refs->lock); 871 } 872 873 if (path->slots[0]) { 874 struct extent_buffer *leaf; 875 int slot; 876 877 path->slots[0]--; 878 leaf = path->nodes[0]; 879 slot = path->slots[0]; 880 btrfs_item_key_to_cpu(leaf, &key, slot); 881 if (key.objectid == bytenr && 882 (key.type == BTRFS_EXTENT_ITEM_KEY || 883 key.type == BTRFS_METADATA_ITEM_KEY)) { 884 ret = __add_inline_refs(fs_info, path, bytenr, 885 &info_level, &prefs); 886 if (ret) 887 goto out; 888 ret = __add_keyed_refs(fs_info, path, bytenr, 889 info_level, &prefs); 890 if (ret) 891 goto out; 892 } 893 } 894 btrfs_release_path(path); 895 896 list_splice_init(&prefs_delayed, &prefs); 897 898 ret = __add_missing_keys(fs_info, &prefs); 899 if (ret) 900 goto out; 901 902 __merge_refs(&prefs, 1); 903 904 ret = __resolve_indirect_refs(fs_info, path, time_seq, &prefs, 905 extent_item_pos); 906 if (ret) 907 goto out; 908 909 __merge_refs(&prefs, 2); 910 911 while (!list_empty(&prefs)) { 912 ref = list_first_entry(&prefs, struct __prelim_ref, list); 913 WARN_ON(ref->count < 0); 914 if (ref->count && ref->root_id && ref->parent == 0) { 915 /* no parent == root of tree */ 916 ret = ulist_add(roots, ref->root_id, 0, GFP_NOFS); 917 if (ret < 0) 918 goto out; 919 } 920 if (ref->count && ref->parent) { 921 struct extent_inode_elem *eie = NULL; 922 if (extent_item_pos && !ref->inode_list) { 923 u32 bsz; 924 struct extent_buffer *eb; 925 bsz = btrfs_level_size(fs_info->extent_root, 926 info_level); 927 eb = read_tree_block(fs_info->extent_root, 928 ref->parent, bsz, 0); 929 if (!eb || !extent_buffer_uptodate(eb)) { 930 free_extent_buffer(eb); 931 ret = -EIO; 932 goto out; 933 } 934 ret = find_extent_in_eb(eb, bytenr, 935 *extent_item_pos, &eie); 936 free_extent_buffer(eb); 937 if (ret < 0) 938 goto out; 939 ref->inode_list = eie; 940 } 941 ret = ulist_add_merge(refs, ref->parent, 942 (uintptr_t)ref->inode_list, 943 (u64 *)&eie, GFP_NOFS); 944 if (ret < 0) 945 goto out; 946 if (!ret && extent_item_pos) { 947 /* 948 * we've recorded that parent, so we must extend 949 * its inode list here 950 */ 951 BUG_ON(!eie); 952 while (eie->next) 953 eie = eie->next; 954 eie->next = ref->inode_list; 955 } 956 } 957 list_del(&ref->list); 958 kfree(ref); 959 } 960 961 out: 962 btrfs_free_path(path); 963 while (!list_empty(&prefs)) { 964 ref = list_first_entry(&prefs, struct __prelim_ref, list); 965 list_del(&ref->list); 966 kfree(ref); 967 } 968 while (!list_empty(&prefs_delayed)) { 969 ref = list_first_entry(&prefs_delayed, struct __prelim_ref, 970 list); 971 list_del(&ref->list); 972 kfree(ref); 973 } 974 975 return ret; 976 } 977 978 static void free_leaf_list(struct ulist *blocks) 979 { 980 struct ulist_node *node = NULL; 981 struct extent_inode_elem *eie; 982 struct extent_inode_elem *eie_next; 983 struct ulist_iterator uiter; 984 985 ULIST_ITER_INIT(&uiter); 986 while ((node = ulist_next(blocks, &uiter))) { 987 if (!node->aux) 988 continue; 989 eie = (struct extent_inode_elem *)(uintptr_t)node->aux; 990 for (; eie; eie = eie_next) { 991 eie_next = eie->next; 992 kfree(eie); 993 } 994 node->aux = 0; 995 } 996 997 ulist_free(blocks); 998 } 999 1000 /* 1001 * Finds all leafs with a reference to the specified combination of bytenr and 1002 * offset. key_list_head will point to a list of corresponding keys (caller must 1003 * free each list element). The leafs will be stored in the leafs ulist, which 1004 * must be freed with ulist_free. 1005 * 1006 * returns 0 on success, <0 on error 1007 */ 1008 static int btrfs_find_all_leafs(struct btrfs_trans_handle *trans, 1009 struct btrfs_fs_info *fs_info, u64 bytenr, 1010 u64 time_seq, struct ulist **leafs, 1011 const u64 *extent_item_pos) 1012 { 1013 struct ulist *tmp; 1014 int ret; 1015 1016 tmp = ulist_alloc(GFP_NOFS); 1017 if (!tmp) 1018 return -ENOMEM; 1019 *leafs = ulist_alloc(GFP_NOFS); 1020 if (!*leafs) { 1021 ulist_free(tmp); 1022 return -ENOMEM; 1023 } 1024 1025 ret = find_parent_nodes(trans, fs_info, bytenr, 1026 time_seq, *leafs, tmp, extent_item_pos); 1027 ulist_free(tmp); 1028 1029 if (ret < 0 && ret != -ENOENT) { 1030 free_leaf_list(*leafs); 1031 return ret; 1032 } 1033 1034 return 0; 1035 } 1036 1037 /* 1038 * walk all backrefs for a given extent to find all roots that reference this 1039 * extent. Walking a backref means finding all extents that reference this 1040 * extent and in turn walk the backrefs of those, too. Naturally this is a 1041 * recursive process, but here it is implemented in an iterative fashion: We 1042 * find all referencing extents for the extent in question and put them on a 1043 * list. In turn, we find all referencing extents for those, further appending 1044 * to the list. The way we iterate the list allows adding more elements after 1045 * the current while iterating. The process stops when we reach the end of the 1046 * list. Found roots are added to the roots list. 1047 * 1048 * returns 0 on success, < 0 on error. 1049 */ 1050 int btrfs_find_all_roots(struct btrfs_trans_handle *trans, 1051 struct btrfs_fs_info *fs_info, u64 bytenr, 1052 u64 time_seq, struct ulist **roots) 1053 { 1054 struct ulist *tmp; 1055 struct ulist_node *node = NULL; 1056 struct ulist_iterator uiter; 1057 int ret; 1058 1059 tmp = ulist_alloc(GFP_NOFS); 1060 if (!tmp) 1061 return -ENOMEM; 1062 *roots = ulist_alloc(GFP_NOFS); 1063 if (!*roots) { 1064 ulist_free(tmp); 1065 return -ENOMEM; 1066 } 1067 1068 ULIST_ITER_INIT(&uiter); 1069 while (1) { 1070 ret = find_parent_nodes(trans, fs_info, bytenr, 1071 time_seq, tmp, *roots, NULL); 1072 if (ret < 0 && ret != -ENOENT) { 1073 ulist_free(tmp); 1074 ulist_free(*roots); 1075 return ret; 1076 } 1077 node = ulist_next(tmp, &uiter); 1078 if (!node) 1079 break; 1080 bytenr = node->val; 1081 } 1082 1083 ulist_free(tmp); 1084 return 0; 1085 } 1086 1087 1088 static int __inode_info(u64 inum, u64 ioff, u8 key_type, 1089 struct btrfs_root *fs_root, struct btrfs_path *path, 1090 struct btrfs_key *found_key) 1091 { 1092 int ret; 1093 struct btrfs_key key; 1094 struct extent_buffer *eb; 1095 1096 key.type = key_type; 1097 key.objectid = inum; 1098 key.offset = ioff; 1099 1100 ret = btrfs_search_slot(NULL, fs_root, &key, path, 0, 0); 1101 if (ret < 0) 1102 return ret; 1103 1104 eb = path->nodes[0]; 1105 if (ret && path->slots[0] >= btrfs_header_nritems(eb)) { 1106 ret = btrfs_next_leaf(fs_root, path); 1107 if (ret) 1108 return ret; 1109 eb = path->nodes[0]; 1110 } 1111 1112 btrfs_item_key_to_cpu(eb, found_key, path->slots[0]); 1113 if (found_key->type != key.type || found_key->objectid != key.objectid) 1114 return 1; 1115 1116 return 0; 1117 } 1118 1119 /* 1120 * this makes the path point to (inum INODE_ITEM ioff) 1121 */ 1122 int inode_item_info(u64 inum, u64 ioff, struct btrfs_root *fs_root, 1123 struct btrfs_path *path) 1124 { 1125 struct btrfs_key key; 1126 return __inode_info(inum, ioff, BTRFS_INODE_ITEM_KEY, fs_root, path, 1127 &key); 1128 } 1129 1130 static int inode_ref_info(u64 inum, u64 ioff, struct btrfs_root *fs_root, 1131 struct btrfs_path *path, 1132 struct btrfs_key *found_key) 1133 { 1134 return __inode_info(inum, ioff, BTRFS_INODE_REF_KEY, fs_root, path, 1135 found_key); 1136 } 1137 1138 int btrfs_find_one_extref(struct btrfs_root *root, u64 inode_objectid, 1139 u64 start_off, struct btrfs_path *path, 1140 struct btrfs_inode_extref **ret_extref, 1141 u64 *found_off) 1142 { 1143 int ret, slot; 1144 struct btrfs_key key; 1145 struct btrfs_key found_key; 1146 struct btrfs_inode_extref *extref; 1147 struct extent_buffer *leaf; 1148 unsigned long ptr; 1149 1150 key.objectid = inode_objectid; 1151 btrfs_set_key_type(&key, BTRFS_INODE_EXTREF_KEY); 1152 key.offset = start_off; 1153 1154 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); 1155 if (ret < 0) 1156 return ret; 1157 1158 while (1) { 1159 leaf = path->nodes[0]; 1160 slot = path->slots[0]; 1161 if (slot >= btrfs_header_nritems(leaf)) { 1162 /* 1163 * If the item at offset is not found, 1164 * btrfs_search_slot will point us to the slot 1165 * where it should be inserted. In our case 1166 * that will be the slot directly before the 1167 * next INODE_REF_KEY_V2 item. In the case 1168 * that we're pointing to the last slot in a 1169 * leaf, we must move one leaf over. 1170 */ 1171 ret = btrfs_next_leaf(root, path); 1172 if (ret) { 1173 if (ret >= 1) 1174 ret = -ENOENT; 1175 break; 1176 } 1177 continue; 1178 } 1179 1180 btrfs_item_key_to_cpu(leaf, &found_key, slot); 1181 1182 /* 1183 * Check that we're still looking at an extended ref key for 1184 * this particular objectid. If we have different 1185 * objectid or type then there are no more to be found 1186 * in the tree and we can exit. 1187 */ 1188 ret = -ENOENT; 1189 if (found_key.objectid != inode_objectid) 1190 break; 1191 if (btrfs_key_type(&found_key) != BTRFS_INODE_EXTREF_KEY) 1192 break; 1193 1194 ret = 0; 1195 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]); 1196 extref = (struct btrfs_inode_extref *)ptr; 1197 *ret_extref = extref; 1198 if (found_off) 1199 *found_off = found_key.offset; 1200 break; 1201 } 1202 1203 return ret; 1204 } 1205 1206 /* 1207 * this iterates to turn a name (from iref/extref) into a full filesystem path. 1208 * Elements of the path are separated by '/' and the path is guaranteed to be 1209 * 0-terminated. the path is only given within the current file system. 1210 * Therefore, it never starts with a '/'. the caller is responsible to provide 1211 * "size" bytes in "dest". the dest buffer will be filled backwards. finally, 1212 * the start point of the resulting string is returned. this pointer is within 1213 * dest, normally. 1214 * in case the path buffer would overflow, the pointer is decremented further 1215 * as if output was written to the buffer, though no more output is actually 1216 * generated. that way, the caller can determine how much space would be 1217 * required for the path to fit into the buffer. in that case, the returned 1218 * value will be smaller than dest. callers must check this! 1219 */ 1220 char *btrfs_ref_to_path(struct btrfs_root *fs_root, struct btrfs_path *path, 1221 u32 name_len, unsigned long name_off, 1222 struct extent_buffer *eb_in, u64 parent, 1223 char *dest, u32 size) 1224 { 1225 int slot; 1226 u64 next_inum; 1227 int ret; 1228 s64 bytes_left = ((s64)size) - 1; 1229 struct extent_buffer *eb = eb_in; 1230 struct btrfs_key found_key; 1231 int leave_spinning = path->leave_spinning; 1232 struct btrfs_inode_ref *iref; 1233 1234 if (bytes_left >= 0) 1235 dest[bytes_left] = '\0'; 1236 1237 path->leave_spinning = 1; 1238 while (1) { 1239 bytes_left -= name_len; 1240 if (bytes_left >= 0) 1241 read_extent_buffer(eb, dest + bytes_left, 1242 name_off, name_len); 1243 if (eb != eb_in) { 1244 btrfs_tree_read_unlock_blocking(eb); 1245 free_extent_buffer(eb); 1246 } 1247 ret = inode_ref_info(parent, 0, fs_root, path, &found_key); 1248 if (ret > 0) 1249 ret = -ENOENT; 1250 if (ret) 1251 break; 1252 1253 next_inum = found_key.offset; 1254 1255 /* regular exit ahead */ 1256 if (parent == next_inum) 1257 break; 1258 1259 slot = path->slots[0]; 1260 eb = path->nodes[0]; 1261 /* make sure we can use eb after releasing the path */ 1262 if (eb != eb_in) { 1263 atomic_inc(&eb->refs); 1264 btrfs_tree_read_lock(eb); 1265 btrfs_set_lock_blocking_rw(eb, BTRFS_READ_LOCK); 1266 } 1267 btrfs_release_path(path); 1268 iref = btrfs_item_ptr(eb, slot, struct btrfs_inode_ref); 1269 1270 name_len = btrfs_inode_ref_name_len(eb, iref); 1271 name_off = (unsigned long)(iref + 1); 1272 1273 parent = next_inum; 1274 --bytes_left; 1275 if (bytes_left >= 0) 1276 dest[bytes_left] = '/'; 1277 } 1278 1279 btrfs_release_path(path); 1280 path->leave_spinning = leave_spinning; 1281 1282 if (ret) 1283 return ERR_PTR(ret); 1284 1285 return dest + bytes_left; 1286 } 1287 1288 /* 1289 * this makes the path point to (logical EXTENT_ITEM *) 1290 * returns BTRFS_EXTENT_FLAG_DATA for data, BTRFS_EXTENT_FLAG_TREE_BLOCK for 1291 * tree blocks and <0 on error. 1292 */ 1293 int extent_from_logical(struct btrfs_fs_info *fs_info, u64 logical, 1294 struct btrfs_path *path, struct btrfs_key *found_key, 1295 u64 *flags_ret) 1296 { 1297 int ret; 1298 u64 flags; 1299 u64 size = 0; 1300 u32 item_size; 1301 struct extent_buffer *eb; 1302 struct btrfs_extent_item *ei; 1303 struct btrfs_key key; 1304 1305 if (btrfs_fs_incompat(fs_info, SKINNY_METADATA)) 1306 key.type = BTRFS_METADATA_ITEM_KEY; 1307 else 1308 key.type = BTRFS_EXTENT_ITEM_KEY; 1309 key.objectid = logical; 1310 key.offset = (u64)-1; 1311 1312 ret = btrfs_search_slot(NULL, fs_info->extent_root, &key, path, 0, 0); 1313 if (ret < 0) 1314 return ret; 1315 ret = btrfs_previous_item(fs_info->extent_root, path, 1316 0, BTRFS_EXTENT_ITEM_KEY); 1317 if (ret < 0) 1318 return ret; 1319 1320 btrfs_item_key_to_cpu(path->nodes[0], found_key, path->slots[0]); 1321 if (found_key->type == BTRFS_METADATA_ITEM_KEY) 1322 size = fs_info->extent_root->leafsize; 1323 else if (found_key->type == BTRFS_EXTENT_ITEM_KEY) 1324 size = found_key->offset; 1325 1326 if ((found_key->type != BTRFS_EXTENT_ITEM_KEY && 1327 found_key->type != BTRFS_METADATA_ITEM_KEY) || 1328 found_key->objectid > logical || 1329 found_key->objectid + size <= logical) { 1330 pr_debug("logical %llu is not within any extent\n", logical); 1331 return -ENOENT; 1332 } 1333 1334 eb = path->nodes[0]; 1335 item_size = btrfs_item_size_nr(eb, path->slots[0]); 1336 BUG_ON(item_size < sizeof(*ei)); 1337 1338 ei = btrfs_item_ptr(eb, path->slots[0], struct btrfs_extent_item); 1339 flags = btrfs_extent_flags(eb, ei); 1340 1341 pr_debug("logical %llu is at position %llu within the extent (%llu " 1342 "EXTENT_ITEM %llu) flags %#llx size %u\n", 1343 logical, logical - found_key->objectid, found_key->objectid, 1344 found_key->offset, flags, item_size); 1345 1346 WARN_ON(!flags_ret); 1347 if (flags_ret) { 1348 if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) 1349 *flags_ret = BTRFS_EXTENT_FLAG_TREE_BLOCK; 1350 else if (flags & BTRFS_EXTENT_FLAG_DATA) 1351 *flags_ret = BTRFS_EXTENT_FLAG_DATA; 1352 else 1353 BUG_ON(1); 1354 return 0; 1355 } 1356 1357 return -EIO; 1358 } 1359 1360 /* 1361 * helper function to iterate extent inline refs. ptr must point to a 0 value 1362 * for the first call and may be modified. it is used to track state. 1363 * if more refs exist, 0 is returned and the next call to 1364 * __get_extent_inline_ref must pass the modified ptr parameter to get the 1365 * next ref. after the last ref was processed, 1 is returned. 1366 * returns <0 on error 1367 */ 1368 static int __get_extent_inline_ref(unsigned long *ptr, struct extent_buffer *eb, 1369 struct btrfs_extent_item *ei, u32 item_size, 1370 struct btrfs_extent_inline_ref **out_eiref, 1371 int *out_type) 1372 { 1373 unsigned long end; 1374 u64 flags; 1375 struct btrfs_tree_block_info *info; 1376 1377 if (!*ptr) { 1378 /* first call */ 1379 flags = btrfs_extent_flags(eb, ei); 1380 if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) { 1381 info = (struct btrfs_tree_block_info *)(ei + 1); 1382 *out_eiref = 1383 (struct btrfs_extent_inline_ref *)(info + 1); 1384 } else { 1385 *out_eiref = (struct btrfs_extent_inline_ref *)(ei + 1); 1386 } 1387 *ptr = (unsigned long)*out_eiref; 1388 if ((void *)*ptr >= (void *)ei + item_size) 1389 return -ENOENT; 1390 } 1391 1392 end = (unsigned long)ei + item_size; 1393 *out_eiref = (struct btrfs_extent_inline_ref *)*ptr; 1394 *out_type = btrfs_extent_inline_ref_type(eb, *out_eiref); 1395 1396 *ptr += btrfs_extent_inline_ref_size(*out_type); 1397 WARN_ON(*ptr > end); 1398 if (*ptr == end) 1399 return 1; /* last */ 1400 1401 return 0; 1402 } 1403 1404 /* 1405 * reads the tree block backref for an extent. tree level and root are returned 1406 * through out_level and out_root. ptr must point to a 0 value for the first 1407 * call and may be modified (see __get_extent_inline_ref comment). 1408 * returns 0 if data was provided, 1 if there was no more data to provide or 1409 * <0 on error. 1410 */ 1411 int tree_backref_for_extent(unsigned long *ptr, struct extent_buffer *eb, 1412 struct btrfs_extent_item *ei, u32 item_size, 1413 u64 *out_root, u8 *out_level) 1414 { 1415 int ret; 1416 int type; 1417 struct btrfs_tree_block_info *info; 1418 struct btrfs_extent_inline_ref *eiref; 1419 1420 if (*ptr == (unsigned long)-1) 1421 return 1; 1422 1423 while (1) { 1424 ret = __get_extent_inline_ref(ptr, eb, ei, item_size, 1425 &eiref, &type); 1426 if (ret < 0) 1427 return ret; 1428 1429 if (type == BTRFS_TREE_BLOCK_REF_KEY || 1430 type == BTRFS_SHARED_BLOCK_REF_KEY) 1431 break; 1432 1433 if (ret == 1) 1434 return 1; 1435 } 1436 1437 /* we can treat both ref types equally here */ 1438 info = (struct btrfs_tree_block_info *)(ei + 1); 1439 *out_root = btrfs_extent_inline_ref_offset(eb, eiref); 1440 *out_level = btrfs_tree_block_level(eb, info); 1441 1442 if (ret == 1) 1443 *ptr = (unsigned long)-1; 1444 1445 return 0; 1446 } 1447 1448 static int iterate_leaf_refs(struct extent_inode_elem *inode_list, 1449 u64 root, u64 extent_item_objectid, 1450 iterate_extent_inodes_t *iterate, void *ctx) 1451 { 1452 struct extent_inode_elem *eie; 1453 int ret = 0; 1454 1455 for (eie = inode_list; eie; eie = eie->next) { 1456 pr_debug("ref for %llu resolved, key (%llu EXTEND_DATA %llu), " 1457 "root %llu\n", extent_item_objectid, 1458 eie->inum, eie->offset, root); 1459 ret = iterate(eie->inum, eie->offset, root, ctx); 1460 if (ret) { 1461 pr_debug("stopping iteration for %llu due to ret=%d\n", 1462 extent_item_objectid, ret); 1463 break; 1464 } 1465 } 1466 1467 return ret; 1468 } 1469 1470 /* 1471 * calls iterate() for every inode that references the extent identified by 1472 * the given parameters. 1473 * when the iterator function returns a non-zero value, iteration stops. 1474 */ 1475 int iterate_extent_inodes(struct btrfs_fs_info *fs_info, 1476 u64 extent_item_objectid, u64 extent_item_pos, 1477 int search_commit_root, 1478 iterate_extent_inodes_t *iterate, void *ctx) 1479 { 1480 int ret; 1481 struct btrfs_trans_handle *trans = NULL; 1482 struct ulist *refs = NULL; 1483 struct ulist *roots = NULL; 1484 struct ulist_node *ref_node = NULL; 1485 struct ulist_node *root_node = NULL; 1486 struct seq_list tree_mod_seq_elem = {}; 1487 struct ulist_iterator ref_uiter; 1488 struct ulist_iterator root_uiter; 1489 1490 pr_debug("resolving all inodes for extent %llu\n", 1491 extent_item_objectid); 1492 1493 if (!search_commit_root) { 1494 trans = btrfs_join_transaction(fs_info->extent_root); 1495 if (IS_ERR(trans)) 1496 return PTR_ERR(trans); 1497 btrfs_get_tree_mod_seq(fs_info, &tree_mod_seq_elem); 1498 } 1499 1500 ret = btrfs_find_all_leafs(trans, fs_info, extent_item_objectid, 1501 tree_mod_seq_elem.seq, &refs, 1502 &extent_item_pos); 1503 if (ret) 1504 goto out; 1505 1506 ULIST_ITER_INIT(&ref_uiter); 1507 while (!ret && (ref_node = ulist_next(refs, &ref_uiter))) { 1508 ret = btrfs_find_all_roots(trans, fs_info, ref_node->val, 1509 tree_mod_seq_elem.seq, &roots); 1510 if (ret) 1511 break; 1512 ULIST_ITER_INIT(&root_uiter); 1513 while (!ret && (root_node = ulist_next(roots, &root_uiter))) { 1514 pr_debug("root %llu references leaf %llu, data list " 1515 "%#llx\n", root_node->val, ref_node->val, 1516 ref_node->aux); 1517 ret = iterate_leaf_refs((struct extent_inode_elem *) 1518 (uintptr_t)ref_node->aux, 1519 root_node->val, 1520 extent_item_objectid, 1521 iterate, ctx); 1522 } 1523 ulist_free(roots); 1524 } 1525 1526 free_leaf_list(refs); 1527 out: 1528 if (!search_commit_root) { 1529 btrfs_put_tree_mod_seq(fs_info, &tree_mod_seq_elem); 1530 btrfs_end_transaction(trans, fs_info->extent_root); 1531 } 1532 1533 return ret; 1534 } 1535 1536 int iterate_inodes_from_logical(u64 logical, struct btrfs_fs_info *fs_info, 1537 struct btrfs_path *path, 1538 iterate_extent_inodes_t *iterate, void *ctx) 1539 { 1540 int ret; 1541 u64 extent_item_pos; 1542 u64 flags = 0; 1543 struct btrfs_key found_key; 1544 int search_commit_root = path->search_commit_root; 1545 1546 ret = extent_from_logical(fs_info, logical, path, &found_key, &flags); 1547 btrfs_release_path(path); 1548 if (ret < 0) 1549 return ret; 1550 if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) 1551 return -EINVAL; 1552 1553 extent_item_pos = logical - found_key.objectid; 1554 ret = iterate_extent_inodes(fs_info, found_key.objectid, 1555 extent_item_pos, search_commit_root, 1556 iterate, ctx); 1557 1558 return ret; 1559 } 1560 1561 typedef int (iterate_irefs_t)(u64 parent, u32 name_len, unsigned long name_off, 1562 struct extent_buffer *eb, void *ctx); 1563 1564 static int iterate_inode_refs(u64 inum, struct btrfs_root *fs_root, 1565 struct btrfs_path *path, 1566 iterate_irefs_t *iterate, void *ctx) 1567 { 1568 int ret = 0; 1569 int slot; 1570 u32 cur; 1571 u32 len; 1572 u32 name_len; 1573 u64 parent = 0; 1574 int found = 0; 1575 struct extent_buffer *eb; 1576 struct btrfs_item *item; 1577 struct btrfs_inode_ref *iref; 1578 struct btrfs_key found_key; 1579 1580 while (!ret) { 1581 path->leave_spinning = 1; 1582 ret = inode_ref_info(inum, parent ? parent+1 : 0, fs_root, path, 1583 &found_key); 1584 if (ret < 0) 1585 break; 1586 if (ret) { 1587 ret = found ? 0 : -ENOENT; 1588 break; 1589 } 1590 ++found; 1591 1592 parent = found_key.offset; 1593 slot = path->slots[0]; 1594 eb = path->nodes[0]; 1595 /* make sure we can use eb after releasing the path */ 1596 atomic_inc(&eb->refs); 1597 btrfs_tree_read_lock(eb); 1598 btrfs_set_lock_blocking_rw(eb, BTRFS_READ_LOCK); 1599 btrfs_release_path(path); 1600 1601 item = btrfs_item_nr(eb, slot); 1602 iref = btrfs_item_ptr(eb, slot, struct btrfs_inode_ref); 1603 1604 for (cur = 0; cur < btrfs_item_size(eb, item); cur += len) { 1605 name_len = btrfs_inode_ref_name_len(eb, iref); 1606 /* path must be released before calling iterate()! */ 1607 pr_debug("following ref at offset %u for inode %llu in " 1608 "tree %llu\n", cur, found_key.objectid, 1609 fs_root->objectid); 1610 ret = iterate(parent, name_len, 1611 (unsigned long)(iref + 1), eb, ctx); 1612 if (ret) 1613 break; 1614 len = sizeof(*iref) + name_len; 1615 iref = (struct btrfs_inode_ref *)((char *)iref + len); 1616 } 1617 btrfs_tree_read_unlock_blocking(eb); 1618 free_extent_buffer(eb); 1619 } 1620 1621 btrfs_release_path(path); 1622 1623 return ret; 1624 } 1625 1626 static int iterate_inode_extrefs(u64 inum, struct btrfs_root *fs_root, 1627 struct btrfs_path *path, 1628 iterate_irefs_t *iterate, void *ctx) 1629 { 1630 int ret; 1631 int slot; 1632 u64 offset = 0; 1633 u64 parent; 1634 int found = 0; 1635 struct extent_buffer *eb; 1636 struct btrfs_inode_extref *extref; 1637 struct extent_buffer *leaf; 1638 u32 item_size; 1639 u32 cur_offset; 1640 unsigned long ptr; 1641 1642 while (1) { 1643 ret = btrfs_find_one_extref(fs_root, inum, offset, path, &extref, 1644 &offset); 1645 if (ret < 0) 1646 break; 1647 if (ret) { 1648 ret = found ? 0 : -ENOENT; 1649 break; 1650 } 1651 ++found; 1652 1653 slot = path->slots[0]; 1654 eb = path->nodes[0]; 1655 /* make sure we can use eb after releasing the path */ 1656 atomic_inc(&eb->refs); 1657 1658 btrfs_tree_read_lock(eb); 1659 btrfs_set_lock_blocking_rw(eb, BTRFS_READ_LOCK); 1660 btrfs_release_path(path); 1661 1662 leaf = path->nodes[0]; 1663 item_size = btrfs_item_size_nr(leaf, path->slots[0]); 1664 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]); 1665 cur_offset = 0; 1666 1667 while (cur_offset < item_size) { 1668 u32 name_len; 1669 1670 extref = (struct btrfs_inode_extref *)(ptr + cur_offset); 1671 parent = btrfs_inode_extref_parent(eb, extref); 1672 name_len = btrfs_inode_extref_name_len(eb, extref); 1673 ret = iterate(parent, name_len, 1674 (unsigned long)&extref->name, eb, ctx); 1675 if (ret) 1676 break; 1677 1678 cur_offset += btrfs_inode_extref_name_len(leaf, extref); 1679 cur_offset += sizeof(*extref); 1680 } 1681 btrfs_tree_read_unlock_blocking(eb); 1682 free_extent_buffer(eb); 1683 1684 offset++; 1685 } 1686 1687 btrfs_release_path(path); 1688 1689 return ret; 1690 } 1691 1692 static int iterate_irefs(u64 inum, struct btrfs_root *fs_root, 1693 struct btrfs_path *path, iterate_irefs_t *iterate, 1694 void *ctx) 1695 { 1696 int ret; 1697 int found_refs = 0; 1698 1699 ret = iterate_inode_refs(inum, fs_root, path, iterate, ctx); 1700 if (!ret) 1701 ++found_refs; 1702 else if (ret != -ENOENT) 1703 return ret; 1704 1705 ret = iterate_inode_extrefs(inum, fs_root, path, iterate, ctx); 1706 if (ret == -ENOENT && found_refs) 1707 return 0; 1708 1709 return ret; 1710 } 1711 1712 /* 1713 * returns 0 if the path could be dumped (probably truncated) 1714 * returns <0 in case of an error 1715 */ 1716 static int inode_to_path(u64 inum, u32 name_len, unsigned long name_off, 1717 struct extent_buffer *eb, void *ctx) 1718 { 1719 struct inode_fs_paths *ipath = ctx; 1720 char *fspath; 1721 char *fspath_min; 1722 int i = ipath->fspath->elem_cnt; 1723 const int s_ptr = sizeof(char *); 1724 u32 bytes_left; 1725 1726 bytes_left = ipath->fspath->bytes_left > s_ptr ? 1727 ipath->fspath->bytes_left - s_ptr : 0; 1728 1729 fspath_min = (char *)ipath->fspath->val + (i + 1) * s_ptr; 1730 fspath = btrfs_ref_to_path(ipath->fs_root, ipath->btrfs_path, name_len, 1731 name_off, eb, inum, fspath_min, bytes_left); 1732 if (IS_ERR(fspath)) 1733 return PTR_ERR(fspath); 1734 1735 if (fspath > fspath_min) { 1736 ipath->fspath->val[i] = (u64)(unsigned long)fspath; 1737 ++ipath->fspath->elem_cnt; 1738 ipath->fspath->bytes_left = fspath - fspath_min; 1739 } else { 1740 ++ipath->fspath->elem_missed; 1741 ipath->fspath->bytes_missing += fspath_min - fspath; 1742 ipath->fspath->bytes_left = 0; 1743 } 1744 1745 return 0; 1746 } 1747 1748 /* 1749 * this dumps all file system paths to the inode into the ipath struct, provided 1750 * is has been created large enough. each path is zero-terminated and accessed 1751 * from ipath->fspath->val[i]. 1752 * when it returns, there are ipath->fspath->elem_cnt number of paths available 1753 * in ipath->fspath->val[]. when the allocated space wasn't sufficient, the 1754 * number of missed paths in recored in ipath->fspath->elem_missed, otherwise, 1755 * it's zero. ipath->fspath->bytes_missing holds the number of bytes that would 1756 * have been needed to return all paths. 1757 */ 1758 int paths_from_inode(u64 inum, struct inode_fs_paths *ipath) 1759 { 1760 return iterate_irefs(inum, ipath->fs_root, ipath->btrfs_path, 1761 inode_to_path, ipath); 1762 } 1763 1764 struct btrfs_data_container *init_data_container(u32 total_bytes) 1765 { 1766 struct btrfs_data_container *data; 1767 size_t alloc_bytes; 1768 1769 alloc_bytes = max_t(size_t, total_bytes, sizeof(*data)); 1770 data = vmalloc(alloc_bytes); 1771 if (!data) 1772 return ERR_PTR(-ENOMEM); 1773 1774 if (total_bytes >= sizeof(*data)) { 1775 data->bytes_left = total_bytes - sizeof(*data); 1776 data->bytes_missing = 0; 1777 } else { 1778 data->bytes_missing = sizeof(*data) - total_bytes; 1779 data->bytes_left = 0; 1780 } 1781 1782 data->elem_cnt = 0; 1783 data->elem_missed = 0; 1784 1785 return data; 1786 } 1787 1788 /* 1789 * allocates space to return multiple file system paths for an inode. 1790 * total_bytes to allocate are passed, note that space usable for actual path 1791 * information will be total_bytes - sizeof(struct inode_fs_paths). 1792 * the returned pointer must be freed with free_ipath() in the end. 1793 */ 1794 struct inode_fs_paths *init_ipath(s32 total_bytes, struct btrfs_root *fs_root, 1795 struct btrfs_path *path) 1796 { 1797 struct inode_fs_paths *ifp; 1798 struct btrfs_data_container *fspath; 1799 1800 fspath = init_data_container(total_bytes); 1801 if (IS_ERR(fspath)) 1802 return (void *)fspath; 1803 1804 ifp = kmalloc(sizeof(*ifp), GFP_NOFS); 1805 if (!ifp) { 1806 kfree(fspath); 1807 return ERR_PTR(-ENOMEM); 1808 } 1809 1810 ifp->btrfs_path = path; 1811 ifp->fspath = fspath; 1812 ifp->fs_root = fs_root; 1813 1814 return ifp; 1815 } 1816 1817 void free_ipath(struct inode_fs_paths *ipath) 1818 { 1819 if (!ipath) 1820 return; 1821 vfree(ipath->fspath); 1822 kfree(ipath); 1823 } 1824