ref-verify.c 25 KB

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