ref-verify.c 25 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2014 Facebook. All rights reserved.
  4. */
  5. #include <linux/sched.h>
  6. #include <linux/stacktrace.h>
  7. #include "ctree.h"
  8. #include "disk-io.h"
  9. #include "locking.h"
  10. #include "delayed-ref.h"
  11. #include "ref-verify.h"
  12. /*
  13. * Used to keep track the roots and number of refs each root has for a given
  14. * bytenr. This just tracks the number of direct references, no shared
  15. * references.
  16. */
  17. struct root_entry {
  18. u64 root_objectid;
  19. u64 num_refs;
  20. struct rb_node node;
  21. };
  22. /*
  23. * These are meant to represent what should exist in the extent tree, these can
  24. * be used to verify the extent tree is consistent as these should all match
  25. * what the extent tree says.
  26. */
  27. struct ref_entry {
  28. u64 root_objectid;
  29. u64 parent;
  30. u64 owner;
  31. u64 offset;
  32. u64 num_refs;
  33. struct rb_node node;
  34. };
  35. #define MAX_TRACE 16
  36. /*
  37. * Whenever we add/remove a reference we record the action. The action maps
  38. * back to the delayed ref action. We hold the ref we are changing in the
  39. * action so we can account for the history properly, and we record the root we
  40. * were called with since it could be different from ref_root. We also store
  41. * stack traces because that's how I roll.
  42. */
  43. struct ref_action {
  44. int action;
  45. u64 root;
  46. struct ref_entry ref;
  47. struct list_head list;
  48. unsigned long trace[MAX_TRACE];
  49. unsigned int trace_len;
  50. };
  51. /*
  52. * One of these for every block we reference, it holds the roots and references
  53. * to it as well as all of the ref actions that have occurred to it. We never
  54. * free it until we unmount the file system in order to make sure re-allocations
  55. * are happening properly.
  56. */
  57. struct block_entry {
  58. u64 bytenr;
  59. u64 len;
  60. u64 num_refs;
  61. int metadata;
  62. int from_disk;
  63. struct rb_root roots;
  64. struct rb_root refs;
  65. struct rb_node node;
  66. struct list_head actions;
  67. };
  68. static struct block_entry *insert_block_entry(struct rb_root *root,
  69. struct block_entry *be)
  70. {
  71. struct rb_node **p = &root->rb_node;
  72. struct rb_node *parent_node = NULL;
  73. struct block_entry *entry;
  74. while (*p) {
  75. parent_node = *p;
  76. entry = rb_entry(parent_node, struct block_entry, node);
  77. if (entry->bytenr > be->bytenr)
  78. p = &(*p)->rb_left;
  79. else if (entry->bytenr < be->bytenr)
  80. p = &(*p)->rb_right;
  81. else
  82. return entry;
  83. }
  84. rb_link_node(&be->node, parent_node, p);
  85. rb_insert_color(&be->node, root);
  86. return NULL;
  87. }
  88. static struct block_entry *lookup_block_entry(struct rb_root *root, u64 bytenr)
  89. {
  90. struct rb_node *n;
  91. struct block_entry *entry = NULL;
  92. n = root->rb_node;
  93. while (n) {
  94. entry = rb_entry(n, struct block_entry, node);
  95. if (entry->bytenr < bytenr)
  96. n = n->rb_right;
  97. else if (entry->bytenr > bytenr)
  98. n = n->rb_left;
  99. else
  100. return entry;
  101. }
  102. return NULL;
  103. }
  104. static struct root_entry *insert_root_entry(struct rb_root *root,
  105. struct root_entry *re)
  106. {
  107. struct rb_node **p = &root->rb_node;
  108. struct rb_node *parent_node = NULL;
  109. struct root_entry *entry;
  110. while (*p) {
  111. parent_node = *p;
  112. entry = rb_entry(parent_node, struct root_entry, node);
  113. if (entry->root_objectid > re->root_objectid)
  114. p = &(*p)->rb_left;
  115. else if (entry->root_objectid < re->root_objectid)
  116. p = &(*p)->rb_right;
  117. else
  118. return entry;
  119. }
  120. rb_link_node(&re->node, parent_node, p);
  121. rb_insert_color(&re->node, root);
  122. return NULL;
  123. }
  124. static int comp_refs(struct ref_entry *ref1, struct ref_entry *ref2)
  125. {
  126. if (ref1->root_objectid < ref2->root_objectid)
  127. return -1;
  128. if (ref1->root_objectid > ref2->root_objectid)
  129. return 1;
  130. if (ref1->parent < ref2->parent)
  131. return -1;
  132. if (ref1->parent > ref2->parent)
  133. return 1;
  134. if (ref1->owner < ref2->owner)
  135. return -1;
  136. if (ref1->owner > ref2->owner)
  137. return 1;
  138. if (ref1->offset < ref2->offset)
  139. return -1;
  140. if (ref1->offset > ref2->offset)
  141. return 1;
  142. return 0;
  143. }
  144. static struct ref_entry *insert_ref_entry(struct rb_root *root,
  145. struct ref_entry *ref)
  146. {
  147. struct rb_node **p = &root->rb_node;
  148. struct rb_node *parent_node = NULL;
  149. struct ref_entry *entry;
  150. int cmp;
  151. while (*p) {
  152. parent_node = *p;
  153. entry = rb_entry(parent_node, struct ref_entry, node);
  154. cmp = comp_refs(entry, ref);
  155. if (cmp > 0)
  156. p = &(*p)->rb_left;
  157. else if (cmp < 0)
  158. p = &(*p)->rb_right;
  159. else
  160. return entry;
  161. }
  162. rb_link_node(&ref->node, parent_node, p);
  163. rb_insert_color(&ref->node, root);
  164. return NULL;
  165. }
  166. static struct root_entry *lookup_root_entry(struct rb_root *root, u64 objectid)
  167. {
  168. struct rb_node *n;
  169. struct root_entry *entry = NULL;
  170. n = root->rb_node;
  171. while (n) {
  172. entry = rb_entry(n, struct root_entry, node);
  173. if (entry->root_objectid < objectid)
  174. n = n->rb_right;
  175. else if (entry->root_objectid > objectid)
  176. n = n->rb_left;
  177. else
  178. return entry;
  179. }
  180. return NULL;
  181. }
  182. #ifdef CONFIG_STACKTRACE
  183. static void __save_stack_trace(struct ref_action *ra)
  184. {
  185. ra->trace_len = stack_trace_save(ra->trace, MAX_TRACE, 2);
  186. }
  187. static void __print_stack_trace(struct btrfs_fs_info *fs_info,
  188. struct ref_action *ra)
  189. {
  190. if (ra->trace_len == 0) {
  191. btrfs_err(fs_info, " ref-verify: no stacktrace");
  192. return;
  193. }
  194. stack_trace_print(ra->trace, ra->trace_len, 2);
  195. }
  196. #else
  197. static void inline __save_stack_trace(struct ref_action *ra)
  198. {
  199. }
  200. static void inline __print_stack_trace(struct btrfs_fs_info *fs_info,
  201. struct ref_action *ra)
  202. {
  203. btrfs_err(fs_info, " ref-verify: no stacktrace support");
  204. }
  205. #endif
  206. static void free_block_entry(struct block_entry *be)
  207. {
  208. struct root_entry *re;
  209. struct ref_entry *ref;
  210. struct ref_action *ra;
  211. struct rb_node *n;
  212. while ((n = rb_first(&be->roots))) {
  213. re = rb_entry(n, struct root_entry, node);
  214. rb_erase(&re->node, &be->roots);
  215. kfree(re);
  216. }
  217. while((n = rb_first(&be->refs))) {
  218. ref = rb_entry(n, struct ref_entry, node);
  219. rb_erase(&ref->node, &be->refs);
  220. kfree(ref);
  221. }
  222. while (!list_empty(&be->actions)) {
  223. ra = list_first_entry(&be->actions, struct ref_action,
  224. list);
  225. list_del(&ra->list);
  226. kfree(ra);
  227. }
  228. kfree(be);
  229. }
  230. static struct block_entry *add_block_entry(struct btrfs_fs_info *fs_info,
  231. u64 bytenr, u64 len,
  232. u64 root_objectid)
  233. {
  234. struct block_entry *be = NULL, *exist;
  235. struct root_entry *re = NULL;
  236. re = kzalloc(sizeof(struct root_entry), GFP_KERNEL);
  237. be = kzalloc(sizeof(struct block_entry), GFP_KERNEL);
  238. if (!be || !re) {
  239. kfree(re);
  240. kfree(be);
  241. return ERR_PTR(-ENOMEM);
  242. }
  243. be->bytenr = bytenr;
  244. be->len = len;
  245. re->root_objectid = root_objectid;
  246. re->num_refs = 0;
  247. spin_lock(&fs_info->ref_verify_lock);
  248. exist = insert_block_entry(&fs_info->block_tree, be);
  249. if (exist) {
  250. if (root_objectid) {
  251. struct root_entry *exist_re;
  252. exist_re = insert_root_entry(&exist->roots, re);
  253. if (exist_re)
  254. kfree(re);
  255. } else {
  256. kfree(re);
  257. }
  258. kfree(be);
  259. return exist;
  260. }
  261. be->num_refs = 0;
  262. be->metadata = 0;
  263. be->from_disk = 0;
  264. be->roots = RB_ROOT;
  265. be->refs = RB_ROOT;
  266. INIT_LIST_HEAD(&be->actions);
  267. if (root_objectid)
  268. insert_root_entry(&be->roots, re);
  269. else
  270. kfree(re);
  271. return be;
  272. }
  273. static int add_tree_block(struct btrfs_fs_info *fs_info, u64 ref_root,
  274. u64 parent, u64 bytenr, int level)
  275. {
  276. struct block_entry *be;
  277. struct root_entry *re;
  278. struct ref_entry *ref = NULL, *exist;
  279. ref = kmalloc(sizeof(struct ref_entry), GFP_KERNEL);
  280. if (!ref)
  281. return -ENOMEM;
  282. if (parent)
  283. ref->root_objectid = 0;
  284. else
  285. ref->root_objectid = ref_root;
  286. ref->parent = parent;
  287. ref->owner = level;
  288. ref->offset = 0;
  289. ref->num_refs = 1;
  290. be = add_block_entry(fs_info, bytenr, fs_info->nodesize, ref_root);
  291. if (IS_ERR(be)) {
  292. kfree(ref);
  293. return PTR_ERR(be);
  294. }
  295. be->num_refs++;
  296. be->from_disk = 1;
  297. be->metadata = 1;
  298. if (!parent) {
  299. ASSERT(ref_root);
  300. re = lookup_root_entry(&be->roots, ref_root);
  301. ASSERT(re);
  302. re->num_refs++;
  303. }
  304. exist = insert_ref_entry(&be->refs, ref);
  305. if (exist) {
  306. exist->num_refs++;
  307. kfree(ref);
  308. }
  309. spin_unlock(&fs_info->ref_verify_lock);
  310. return 0;
  311. }
  312. static int add_shared_data_ref(struct btrfs_fs_info *fs_info,
  313. u64 parent, u32 num_refs, u64 bytenr,
  314. u64 num_bytes)
  315. {
  316. struct block_entry *be;
  317. struct ref_entry *ref;
  318. ref = kzalloc(sizeof(struct ref_entry), GFP_KERNEL);
  319. if (!ref)
  320. return -ENOMEM;
  321. be = add_block_entry(fs_info, bytenr, num_bytes, 0);
  322. if (IS_ERR(be)) {
  323. kfree(ref);
  324. return PTR_ERR(be);
  325. }
  326. be->num_refs += num_refs;
  327. ref->parent = parent;
  328. ref->num_refs = num_refs;
  329. if (insert_ref_entry(&be->refs, ref)) {
  330. spin_unlock(&fs_info->ref_verify_lock);
  331. btrfs_err(fs_info, "existing shared ref when reading from disk?");
  332. kfree(ref);
  333. return -EINVAL;
  334. }
  335. spin_unlock(&fs_info->ref_verify_lock);
  336. return 0;
  337. }
  338. static int add_extent_data_ref(struct btrfs_fs_info *fs_info,
  339. struct extent_buffer *leaf,
  340. struct btrfs_extent_data_ref *dref,
  341. u64 bytenr, u64 num_bytes)
  342. {
  343. struct block_entry *be;
  344. struct ref_entry *ref;
  345. struct root_entry *re;
  346. u64 ref_root = btrfs_extent_data_ref_root(leaf, dref);
  347. u64 owner = btrfs_extent_data_ref_objectid(leaf, dref);
  348. u64 offset = btrfs_extent_data_ref_offset(leaf, dref);
  349. u32 num_refs = btrfs_extent_data_ref_count(leaf, dref);
  350. ref = kzalloc(sizeof(struct ref_entry), GFP_KERNEL);
  351. if (!ref)
  352. return -ENOMEM;
  353. be = add_block_entry(fs_info, bytenr, num_bytes, ref_root);
  354. if (IS_ERR(be)) {
  355. kfree(ref);
  356. return PTR_ERR(be);
  357. }
  358. be->num_refs += num_refs;
  359. ref->parent = 0;
  360. ref->owner = owner;
  361. ref->root_objectid = ref_root;
  362. ref->offset = offset;
  363. ref->num_refs = num_refs;
  364. if (insert_ref_entry(&be->refs, ref)) {
  365. spin_unlock(&fs_info->ref_verify_lock);
  366. btrfs_err(fs_info, "existing ref when reading from disk?");
  367. kfree(ref);
  368. return -EINVAL;
  369. }
  370. re = lookup_root_entry(&be->roots, ref_root);
  371. if (!re) {
  372. spin_unlock(&fs_info->ref_verify_lock);
  373. btrfs_err(fs_info, "missing root in new block entry?");
  374. return -EINVAL;
  375. }
  376. re->num_refs += num_refs;
  377. spin_unlock(&fs_info->ref_verify_lock);
  378. return 0;
  379. }
  380. static int process_extent_item(struct btrfs_fs_info *fs_info,
  381. struct btrfs_path *path, struct btrfs_key *key,
  382. int slot, int *tree_block_level)
  383. {
  384. struct btrfs_extent_item *ei;
  385. struct btrfs_extent_inline_ref *iref;
  386. struct btrfs_extent_data_ref *dref;
  387. struct btrfs_shared_data_ref *sref;
  388. struct extent_buffer *leaf = path->nodes[0];
  389. u32 item_size = btrfs_item_size_nr(leaf, slot);
  390. unsigned long end, ptr;
  391. u64 offset, flags, count;
  392. int type, ret;
  393. ei = btrfs_item_ptr(leaf, slot, struct btrfs_extent_item);
  394. flags = btrfs_extent_flags(leaf, ei);
  395. if ((key->type == BTRFS_EXTENT_ITEM_KEY) &&
  396. flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) {
  397. struct btrfs_tree_block_info *info;
  398. info = (struct btrfs_tree_block_info *)(ei + 1);
  399. *tree_block_level = btrfs_tree_block_level(leaf, info);
  400. iref = (struct btrfs_extent_inline_ref *)(info + 1);
  401. } else {
  402. if (key->type == BTRFS_METADATA_ITEM_KEY)
  403. *tree_block_level = key->offset;
  404. iref = (struct btrfs_extent_inline_ref *)(ei + 1);
  405. }
  406. ptr = (unsigned long)iref;
  407. end = (unsigned long)ei + item_size;
  408. while (ptr < end) {
  409. iref = (struct btrfs_extent_inline_ref *)ptr;
  410. type = btrfs_extent_inline_ref_type(leaf, iref);
  411. offset = btrfs_extent_inline_ref_offset(leaf, iref);
  412. switch (type) {
  413. case BTRFS_TREE_BLOCK_REF_KEY:
  414. ret = add_tree_block(fs_info, offset, 0, key->objectid,
  415. *tree_block_level);
  416. break;
  417. case BTRFS_SHARED_BLOCK_REF_KEY:
  418. ret = add_tree_block(fs_info, 0, offset, key->objectid,
  419. *tree_block_level);
  420. break;
  421. case BTRFS_EXTENT_DATA_REF_KEY:
  422. dref = (struct btrfs_extent_data_ref *)(&iref->offset);
  423. ret = add_extent_data_ref(fs_info, leaf, dref,
  424. key->objectid, key->offset);
  425. break;
  426. case BTRFS_SHARED_DATA_REF_KEY:
  427. sref = (struct btrfs_shared_data_ref *)(iref + 1);
  428. count = btrfs_shared_data_ref_count(leaf, sref);
  429. ret = add_shared_data_ref(fs_info, offset, count,
  430. key->objectid, key->offset);
  431. break;
  432. default:
  433. btrfs_err(fs_info, "invalid key type in iref");
  434. ret = -EINVAL;
  435. break;
  436. }
  437. if (ret)
  438. break;
  439. ptr += btrfs_extent_inline_ref_size(type);
  440. }
  441. return ret;
  442. }
  443. static int process_leaf(struct btrfs_root *root,
  444. struct btrfs_path *path, u64 *bytenr, u64 *num_bytes)
  445. {
  446. struct btrfs_fs_info *fs_info = root->fs_info;
  447. struct extent_buffer *leaf = path->nodes[0];
  448. struct btrfs_extent_data_ref *dref;
  449. struct btrfs_shared_data_ref *sref;
  450. u32 count;
  451. int i = 0, tree_block_level = 0, ret = 0;
  452. struct btrfs_key key;
  453. int nritems = btrfs_header_nritems(leaf);
  454. for (i = 0; i < nritems; i++) {
  455. btrfs_item_key_to_cpu(leaf, &key, i);
  456. switch (key.type) {
  457. case BTRFS_EXTENT_ITEM_KEY:
  458. *num_bytes = key.offset;
  459. /* fall through */
  460. case BTRFS_METADATA_ITEM_KEY:
  461. *bytenr = key.objectid;
  462. ret = process_extent_item(fs_info, path, &key, i,
  463. &tree_block_level);
  464. break;
  465. case BTRFS_TREE_BLOCK_REF_KEY:
  466. ret = add_tree_block(fs_info, key.offset, 0,
  467. key.objectid, tree_block_level);
  468. break;
  469. case BTRFS_SHARED_BLOCK_REF_KEY:
  470. ret = add_tree_block(fs_info, 0, key.offset,
  471. key.objectid, tree_block_level);
  472. break;
  473. case BTRFS_EXTENT_DATA_REF_KEY:
  474. dref = btrfs_item_ptr(leaf, i,
  475. struct btrfs_extent_data_ref);
  476. ret = add_extent_data_ref(fs_info, leaf, dref, *bytenr,
  477. *num_bytes);
  478. break;
  479. case BTRFS_SHARED_DATA_REF_KEY:
  480. sref = btrfs_item_ptr(leaf, i,
  481. struct btrfs_shared_data_ref);
  482. count = btrfs_shared_data_ref_count(leaf, sref);
  483. ret = add_shared_data_ref(fs_info, key.offset, count,
  484. *bytenr, *num_bytes);
  485. break;
  486. default:
  487. break;
  488. }
  489. if (ret)
  490. break;
  491. }
  492. return ret;
  493. }
  494. /* Walk down to the leaf from the given level */
  495. static int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path,
  496. int level, u64 *bytenr, u64 *num_bytes)
  497. {
  498. struct btrfs_fs_info *fs_info = root->fs_info;
  499. struct extent_buffer *eb;
  500. u64 block_bytenr, gen;
  501. int ret = 0;
  502. while (level >= 0) {
  503. if (level) {
  504. struct btrfs_key first_key;
  505. block_bytenr = btrfs_node_blockptr(path->nodes[level],
  506. path->slots[level]);
  507. gen = btrfs_node_ptr_generation(path->nodes[level],
  508. path->slots[level]);
  509. btrfs_node_key_to_cpu(path->nodes[level], &first_key,
  510. path->slots[level]);
  511. eb = read_tree_block(fs_info, block_bytenr, gen,
  512. level - 1, &first_key);
  513. if (IS_ERR(eb))
  514. return PTR_ERR(eb);
  515. if (!extent_buffer_uptodate(eb)) {
  516. free_extent_buffer(eb);
  517. return -EIO;
  518. }
  519. btrfs_tree_read_lock(eb);
  520. btrfs_set_lock_blocking_read(eb);
  521. path->nodes[level-1] = eb;
  522. path->slots[level-1] = 0;
  523. path->locks[level-1] = BTRFS_READ_LOCK_BLOCKING;
  524. } else {
  525. ret = process_leaf(root, path, bytenr, num_bytes);
  526. if (ret)
  527. break;
  528. }
  529. level--;
  530. }
  531. return ret;
  532. }
  533. /* Walk up to the next node that needs to be processed */
  534. static int walk_up_tree(struct btrfs_path *path, int *level)
  535. {
  536. int l;
  537. for (l = 0; l < BTRFS_MAX_LEVEL; l++) {
  538. if (!path->nodes[l])
  539. continue;
  540. if (l) {
  541. path->slots[l]++;
  542. if (path->slots[l] <
  543. btrfs_header_nritems(path->nodes[l])) {
  544. *level = l;
  545. return 0;
  546. }
  547. }
  548. btrfs_tree_unlock_rw(path->nodes[l], path->locks[l]);
  549. free_extent_buffer(path->nodes[l]);
  550. path->nodes[l] = NULL;
  551. path->slots[l] = 0;
  552. path->locks[l] = 0;
  553. }
  554. return 1;
  555. }
  556. static void dump_ref_action(struct btrfs_fs_info *fs_info,
  557. struct ref_action *ra)
  558. {
  559. btrfs_err(fs_info,
  560. " Ref action %d, root %llu, ref_root %llu, parent %llu, owner %llu, offset %llu, num_refs %llu",
  561. ra->action, ra->root, ra->ref.root_objectid, ra->ref.parent,
  562. ra->ref.owner, ra->ref.offset, ra->ref.num_refs);
  563. __print_stack_trace(fs_info, ra);
  564. }
  565. /*
  566. * Dumps all the information from the block entry to printk, it's going to be
  567. * awesome.
  568. */
  569. static void dump_block_entry(struct btrfs_fs_info *fs_info,
  570. struct block_entry *be)
  571. {
  572. struct ref_entry *ref;
  573. struct root_entry *re;
  574. struct ref_action *ra;
  575. struct rb_node *n;
  576. btrfs_err(fs_info,
  577. "dumping block entry [%llu %llu], num_refs %llu, metadata %d, from disk %d",
  578. be->bytenr, be->len, be->num_refs, be->metadata,
  579. be->from_disk);
  580. for (n = rb_first(&be->refs); n; n = rb_next(n)) {
  581. ref = rb_entry(n, struct ref_entry, node);
  582. btrfs_err(fs_info,
  583. " ref root %llu, parent %llu, owner %llu, offset %llu, num_refs %llu",
  584. ref->root_objectid, ref->parent, ref->owner,
  585. ref->offset, ref->num_refs);
  586. }
  587. for (n = rb_first(&be->roots); n; n = rb_next(n)) {
  588. re = rb_entry(n, struct root_entry, node);
  589. btrfs_err(fs_info, " root entry %llu, num_refs %llu",
  590. re->root_objectid, re->num_refs);
  591. }
  592. list_for_each_entry(ra, &be->actions, list)
  593. dump_ref_action(fs_info, ra);
  594. }
  595. /*
  596. * btrfs_ref_tree_mod: called when we modify a ref for a bytenr
  597. *
  598. * This will add an action item to the given bytenr and do sanity checks to make
  599. * sure we haven't messed something up. If we are making a new allocation and
  600. * this block entry has history we will delete all previous actions as long as
  601. * our sanity checks pass as they are no longer needed.
  602. */
  603. int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info,
  604. struct btrfs_ref *generic_ref)
  605. {
  606. struct ref_entry *ref = NULL, *exist;
  607. struct ref_action *ra = NULL;
  608. struct block_entry *be = NULL;
  609. struct root_entry *re = NULL;
  610. int action = generic_ref->action;
  611. int ret = 0;
  612. bool metadata;
  613. u64 bytenr = generic_ref->bytenr;
  614. u64 num_bytes = generic_ref->len;
  615. u64 parent = generic_ref->parent;
  616. u64 ref_root;
  617. u64 owner;
  618. u64 offset;
  619. if (!btrfs_test_opt(fs_info, REF_VERIFY))
  620. return 0;
  621. if (generic_ref->type == BTRFS_REF_METADATA) {
  622. ref_root = generic_ref->tree_ref.root;
  623. owner = generic_ref->tree_ref.level;
  624. offset = 0;
  625. } else {
  626. ref_root = generic_ref->data_ref.ref_root;
  627. owner = generic_ref->data_ref.ino;
  628. offset = generic_ref->data_ref.offset;
  629. }
  630. metadata = owner < BTRFS_FIRST_FREE_OBJECTID;
  631. ref = kzalloc(sizeof(struct ref_entry), GFP_NOFS);
  632. ra = kmalloc(sizeof(struct ref_action), GFP_NOFS);
  633. if (!ra || !ref) {
  634. kfree(ref);
  635. kfree(ra);
  636. ret = -ENOMEM;
  637. goto out;
  638. }
  639. if (parent) {
  640. ref->parent = parent;
  641. } else {
  642. ref->root_objectid = ref_root;
  643. ref->owner = owner;
  644. ref->offset = offset;
  645. }
  646. ref->num_refs = (action == BTRFS_DROP_DELAYED_REF) ? -1 : 1;
  647. memcpy(&ra->ref, ref, sizeof(struct ref_entry));
  648. /*
  649. * Save the extra info from the delayed ref in the ref action to make it
  650. * easier to figure out what is happening. The real ref's we add to the
  651. * ref tree need to reflect what we save on disk so it matches any
  652. * on-disk refs we pre-loaded.
  653. */
  654. ra->ref.owner = owner;
  655. ra->ref.offset = offset;
  656. ra->ref.root_objectid = ref_root;
  657. __save_stack_trace(ra);
  658. INIT_LIST_HEAD(&ra->list);
  659. ra->action = action;
  660. ra->root = generic_ref->real_root;
  661. /*
  662. * This is an allocation, preallocate the block_entry in case we haven't
  663. * used it before.
  664. */
  665. ret = -EINVAL;
  666. if (action == BTRFS_ADD_DELAYED_EXTENT) {
  667. /*
  668. * For subvol_create we'll just pass in whatever the parent root
  669. * is and the new root objectid, so let's not treat the passed
  670. * in root as if it really has a ref for this bytenr.
  671. */
  672. be = add_block_entry(fs_info, bytenr, num_bytes, ref_root);
  673. if (IS_ERR(be)) {
  674. kfree(ref);
  675. kfree(ra);
  676. ret = PTR_ERR(be);
  677. goto out;
  678. }
  679. be->num_refs++;
  680. if (metadata)
  681. be->metadata = 1;
  682. if (be->num_refs != 1) {
  683. btrfs_err(fs_info,
  684. "re-allocated a block that still has references to it!");
  685. dump_block_entry(fs_info, be);
  686. dump_ref_action(fs_info, ra);
  687. kfree(ref);
  688. kfree(ra);
  689. goto out_unlock;
  690. }
  691. while (!list_empty(&be->actions)) {
  692. struct ref_action *tmp;
  693. tmp = list_first_entry(&be->actions, struct ref_action,
  694. list);
  695. list_del(&tmp->list);
  696. kfree(tmp);
  697. }
  698. } else {
  699. struct root_entry *tmp;
  700. if (!parent) {
  701. re = kmalloc(sizeof(struct root_entry), GFP_NOFS);
  702. if (!re) {
  703. kfree(ref);
  704. kfree(ra);
  705. ret = -ENOMEM;
  706. goto out;
  707. }
  708. /*
  709. * This is the root that is modifying us, so it's the
  710. * one we want to lookup below when we modify the
  711. * re->num_refs.
  712. */
  713. ref_root = generic_ref->real_root;
  714. re->root_objectid = generic_ref->real_root;
  715. re->num_refs = 0;
  716. }
  717. spin_lock(&fs_info->ref_verify_lock);
  718. be = lookup_block_entry(&fs_info->block_tree, bytenr);
  719. if (!be) {
  720. btrfs_err(fs_info,
  721. "trying to do action %d to bytenr %llu num_bytes %llu but there is no existing entry!",
  722. action, (unsigned long long)bytenr,
  723. (unsigned long long)num_bytes);
  724. dump_ref_action(fs_info, ra);
  725. kfree(ref);
  726. kfree(ra);
  727. goto out_unlock;
  728. }
  729. if (!parent) {
  730. tmp = insert_root_entry(&be->roots, re);
  731. if (tmp) {
  732. kfree(re);
  733. re = tmp;
  734. }
  735. }
  736. }
  737. exist = insert_ref_entry(&be->refs, ref);
  738. if (exist) {
  739. if (action == BTRFS_DROP_DELAYED_REF) {
  740. if (exist->num_refs == 0) {
  741. btrfs_err(fs_info,
  742. "dropping a ref for a existing root that doesn't have a ref on the block");
  743. dump_block_entry(fs_info, be);
  744. dump_ref_action(fs_info, ra);
  745. kfree(ref);
  746. kfree(ra);
  747. goto out_unlock;
  748. }
  749. exist->num_refs--;
  750. if (exist->num_refs == 0) {
  751. rb_erase(&exist->node, &be->refs);
  752. kfree(exist);
  753. }
  754. } else if (!be->metadata) {
  755. exist->num_refs++;
  756. } else {
  757. btrfs_err(fs_info,
  758. "attempting to add another ref for an existing ref on a tree block");
  759. dump_block_entry(fs_info, be);
  760. dump_ref_action(fs_info, ra);
  761. kfree(ref);
  762. kfree(ra);
  763. goto out_unlock;
  764. }
  765. kfree(ref);
  766. } else {
  767. if (action == BTRFS_DROP_DELAYED_REF) {
  768. btrfs_err(fs_info,
  769. "dropping a ref for a root that doesn't have a ref on the block");
  770. dump_block_entry(fs_info, be);
  771. dump_ref_action(fs_info, ra);
  772. kfree(ref);
  773. kfree(ra);
  774. goto out_unlock;
  775. }
  776. }
  777. if (!parent && !re) {
  778. re = lookup_root_entry(&be->roots, ref_root);
  779. if (!re) {
  780. /*
  781. * This shouldn't happen because we will add our re
  782. * above when we lookup the be with !parent, but just in
  783. * case catch this case so we don't panic because I
  784. * didn't think of some other corner case.
  785. */
  786. btrfs_err(fs_info, "failed to find root %llu for %llu",
  787. generic_ref->real_root, be->bytenr);
  788. dump_block_entry(fs_info, be);
  789. dump_ref_action(fs_info, ra);
  790. kfree(ra);
  791. goto out_unlock;
  792. }
  793. }
  794. if (action == BTRFS_DROP_DELAYED_REF) {
  795. if (re)
  796. re->num_refs--;
  797. be->num_refs--;
  798. } else if (action == BTRFS_ADD_DELAYED_REF) {
  799. be->num_refs++;
  800. if (re)
  801. re->num_refs++;
  802. }
  803. list_add_tail(&ra->list, &be->actions);
  804. ret = 0;
  805. out_unlock:
  806. spin_unlock(&fs_info->ref_verify_lock);
  807. out:
  808. if (ret)
  809. btrfs_clear_opt(fs_info->mount_opt, REF_VERIFY);
  810. return ret;
  811. }
  812. /* Free up the ref cache */
  813. void btrfs_free_ref_cache(struct btrfs_fs_info *fs_info)
  814. {
  815. struct block_entry *be;
  816. struct rb_node *n;
  817. if (!btrfs_test_opt(fs_info, REF_VERIFY))
  818. return;
  819. spin_lock(&fs_info->ref_verify_lock);
  820. while ((n = rb_first(&fs_info->block_tree))) {
  821. be = rb_entry(n, struct block_entry, node);
  822. rb_erase(&be->node, &fs_info->block_tree);
  823. free_block_entry(be);
  824. cond_resched_lock(&fs_info->ref_verify_lock);
  825. }
  826. spin_unlock(&fs_info->ref_verify_lock);
  827. }
  828. void btrfs_free_ref_tree_range(struct btrfs_fs_info *fs_info, u64 start,
  829. u64 len)
  830. {
  831. struct block_entry *be = NULL, *entry;
  832. struct rb_node *n;
  833. if (!btrfs_test_opt(fs_info, REF_VERIFY))
  834. return;
  835. spin_lock(&fs_info->ref_verify_lock);
  836. n = fs_info->block_tree.rb_node;
  837. while (n) {
  838. entry = rb_entry(n, struct block_entry, node);
  839. if (entry->bytenr < start) {
  840. n = n->rb_right;
  841. } else if (entry->bytenr > start) {
  842. n = n->rb_left;
  843. } else {
  844. be = entry;
  845. break;
  846. }
  847. /* We want to get as close to start as possible */
  848. if (be == NULL ||
  849. (entry->bytenr < start && be->bytenr > start) ||
  850. (entry->bytenr < start && entry->bytenr > be->bytenr))
  851. be = entry;
  852. }
  853. /*
  854. * Could have an empty block group, maybe have something to check for
  855. * this case to verify we were actually empty?
  856. */
  857. if (!be) {
  858. spin_unlock(&fs_info->ref_verify_lock);
  859. return;
  860. }
  861. n = &be->node;
  862. while (n) {
  863. be = rb_entry(n, struct block_entry, node);
  864. n = rb_next(n);
  865. if (be->bytenr < start && be->bytenr + be->len > start) {
  866. btrfs_err(fs_info,
  867. "block entry overlaps a block group [%llu,%llu]!",
  868. start, len);
  869. dump_block_entry(fs_info, be);
  870. continue;
  871. }
  872. if (be->bytenr < start)
  873. continue;
  874. if (be->bytenr >= start + len)
  875. break;
  876. if (be->bytenr + be->len > start + len) {
  877. btrfs_err(fs_info,
  878. "block entry overlaps a block group [%llu,%llu]!",
  879. start, len);
  880. dump_block_entry(fs_info, be);
  881. }
  882. rb_erase(&be->node, &fs_info->block_tree);
  883. free_block_entry(be);
  884. }
  885. spin_unlock(&fs_info->ref_verify_lock);
  886. }
  887. /* Walk down all roots and build the ref tree, meant to be called at mount */
  888. int btrfs_build_ref_tree(struct btrfs_fs_info *fs_info)
  889. {
  890. struct btrfs_path *path;
  891. struct extent_buffer *eb;
  892. u64 bytenr = 0, num_bytes = 0;
  893. int ret, level;
  894. if (!btrfs_test_opt(fs_info, REF_VERIFY))
  895. return 0;
  896. path = btrfs_alloc_path();
  897. if (!path)
  898. return -ENOMEM;
  899. eb = btrfs_read_lock_root_node(fs_info->extent_root);
  900. btrfs_set_lock_blocking_read(eb);
  901. level = btrfs_header_level(eb);
  902. path->nodes[level] = eb;
  903. path->slots[level] = 0;
  904. path->locks[level] = BTRFS_READ_LOCK_BLOCKING;
  905. while (1) {
  906. /*
  907. * We have to keep track of the bytenr/num_bytes we last hit
  908. * because we could have run out of space for an inline ref, and
  909. * would have had to added a ref key item which may appear on a
  910. * different leaf from the original extent item.
  911. */
  912. ret = walk_down_tree(fs_info->extent_root, path, level,
  913. &bytenr, &num_bytes);
  914. if (ret)
  915. break;
  916. ret = walk_up_tree(path, &level);
  917. if (ret < 0)
  918. break;
  919. if (ret > 0) {
  920. ret = 0;
  921. break;
  922. }
  923. }
  924. if (ret) {
  925. btrfs_clear_opt(fs_info->mount_opt, REF_VERIFY);
  926. btrfs_free_ref_cache(fs_info);
  927. }
  928. btrfs_free_path(path);
  929. return ret;
  930. }