delayed-ref.c 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) 2009 Oracle. All rights reserved.
  4. */
  5. #include <linux/sched.h>
  6. #include <linux/slab.h>
  7. #include <linux/sort.h>
  8. #include "messages.h"
  9. #include "ctree.h"
  10. #include "delayed-ref.h"
  11. #include "transaction.h"
  12. #include "qgroup.h"
  13. #include "space-info.h"
  14. #include "tree-mod-log.h"
  15. #include "fs.h"
  16. struct kmem_cache *btrfs_delayed_ref_head_cachep;
  17. struct kmem_cache *btrfs_delayed_ref_node_cachep;
  18. struct kmem_cache *btrfs_delayed_extent_op_cachep;
  19. /*
  20. * delayed back reference update tracking. For subvolume trees
  21. * we queue up extent allocations and backref maintenance for
  22. * delayed processing. This avoids deep call chains where we
  23. * add extents in the middle of btrfs_search_slot, and it allows
  24. * us to buffer up frequently modified backrefs in an rb tree instead
  25. * of hammering updates on the extent allocation tree.
  26. */
  27. bool btrfs_check_space_for_delayed_refs(struct btrfs_fs_info *fs_info)
  28. {
  29. struct btrfs_block_rsv *delayed_refs_rsv = &fs_info->delayed_refs_rsv;
  30. struct btrfs_block_rsv *global_rsv = &fs_info->global_block_rsv;
  31. bool ret = false;
  32. u64 reserved;
  33. spin_lock(&global_rsv->lock);
  34. reserved = global_rsv->reserved;
  35. spin_unlock(&global_rsv->lock);
  36. /*
  37. * Since the global reserve is just kind of magic we don't really want
  38. * to rely on it to save our bacon, so if our size is more than the
  39. * delayed_refs_rsv and the global rsv then it's time to think about
  40. * bailing.
  41. */
  42. spin_lock(&delayed_refs_rsv->lock);
  43. reserved += delayed_refs_rsv->reserved;
  44. if (delayed_refs_rsv->size >= reserved)
  45. ret = true;
  46. spin_unlock(&delayed_refs_rsv->lock);
  47. return ret;
  48. }
  49. /*
  50. * Release a ref head's reservation.
  51. *
  52. * @fs_info: the filesystem
  53. * @nr_refs: number of delayed refs to drop
  54. * @nr_csums: number of csum items to drop
  55. *
  56. * Drops the delayed ref head's count from the delayed refs rsv and free any
  57. * excess reservation we had.
  58. */
  59. void btrfs_delayed_refs_rsv_release(struct btrfs_fs_info *fs_info, int nr_refs, int nr_csums)
  60. {
  61. struct btrfs_block_rsv *block_rsv = &fs_info->delayed_refs_rsv;
  62. u64 num_bytes;
  63. u64 released;
  64. num_bytes = btrfs_calc_delayed_ref_bytes(fs_info, nr_refs);
  65. num_bytes += btrfs_calc_delayed_ref_csum_bytes(fs_info, nr_csums);
  66. released = btrfs_block_rsv_release(fs_info, block_rsv, num_bytes, NULL);
  67. if (released)
  68. trace_btrfs_space_reservation(fs_info, "delayed_refs_rsv",
  69. 0, released, 0);
  70. }
  71. /*
  72. * Adjust the size of the delayed refs rsv.
  73. *
  74. * This is to be called anytime we may have adjusted trans->delayed_ref_updates
  75. * or trans->delayed_ref_csum_deletions, it'll calculate the additional size and
  76. * add it to the delayed_refs_rsv.
  77. */
  78. void btrfs_update_delayed_refs_rsv(struct btrfs_trans_handle *trans)
  79. {
  80. struct btrfs_fs_info *fs_info = trans->fs_info;
  81. struct btrfs_block_rsv *delayed_rsv = &fs_info->delayed_refs_rsv;
  82. struct btrfs_block_rsv *local_rsv = &trans->delayed_rsv;
  83. u64 num_bytes;
  84. u64 reserved_bytes;
  85. num_bytes = btrfs_calc_delayed_ref_bytes(fs_info, trans->delayed_ref_updates);
  86. num_bytes += btrfs_calc_delayed_ref_csum_bytes(fs_info,
  87. trans->delayed_ref_csum_deletions);
  88. if (num_bytes == 0)
  89. return;
  90. /*
  91. * Try to take num_bytes from the transaction's local delayed reserve.
  92. * If not possible, try to take as much as it's available. If the local
  93. * reserve doesn't have enough reserved space, the delayed refs reserve
  94. * will be refilled next time btrfs_delayed_refs_rsv_refill() is called
  95. * by someone or if a transaction commit is triggered before that, the
  96. * global block reserve will be used. We want to minimize using the
  97. * global block reserve for cases we can account for in advance, to
  98. * avoid exhausting it and reach -ENOSPC during a transaction commit.
  99. */
  100. spin_lock(&local_rsv->lock);
  101. reserved_bytes = min(num_bytes, local_rsv->reserved);
  102. local_rsv->reserved -= reserved_bytes;
  103. local_rsv->full = (local_rsv->reserved >= local_rsv->size);
  104. spin_unlock(&local_rsv->lock);
  105. spin_lock(&delayed_rsv->lock);
  106. delayed_rsv->size += num_bytes;
  107. delayed_rsv->reserved += reserved_bytes;
  108. delayed_rsv->full = (delayed_rsv->reserved >= delayed_rsv->size);
  109. spin_unlock(&delayed_rsv->lock);
  110. trans->delayed_ref_updates = 0;
  111. trans->delayed_ref_csum_deletions = 0;
  112. }
  113. /*
  114. * Adjust the size of the delayed refs block reserve for 1 block group item
  115. * insertion, used after allocating a block group.
  116. */
  117. void btrfs_inc_delayed_refs_rsv_bg_inserts(struct btrfs_fs_info *fs_info)
  118. {
  119. struct btrfs_block_rsv *delayed_rsv = &fs_info->delayed_refs_rsv;
  120. spin_lock(&delayed_rsv->lock);
  121. /*
  122. * Inserting a block group item does not require changing the free space
  123. * tree, only the extent tree or the block group tree, so this is all we
  124. * need.
  125. */
  126. delayed_rsv->size += btrfs_calc_insert_metadata_size(fs_info, 1);
  127. delayed_rsv->full = false;
  128. spin_unlock(&delayed_rsv->lock);
  129. }
  130. /*
  131. * Adjust the size of the delayed refs block reserve to release space for 1
  132. * block group item insertion.
  133. */
  134. void btrfs_dec_delayed_refs_rsv_bg_inserts(struct btrfs_fs_info *fs_info)
  135. {
  136. struct btrfs_block_rsv *delayed_rsv = &fs_info->delayed_refs_rsv;
  137. const u64 num_bytes = btrfs_calc_insert_metadata_size(fs_info, 1);
  138. u64 released;
  139. released = btrfs_block_rsv_release(fs_info, delayed_rsv, num_bytes, NULL);
  140. if (released > 0)
  141. trace_btrfs_space_reservation(fs_info, "delayed_refs_rsv",
  142. 0, released, 0);
  143. }
  144. /*
  145. * Adjust the size of the delayed refs block reserve for 1 block group item
  146. * update.
  147. */
  148. void btrfs_inc_delayed_refs_rsv_bg_updates(struct btrfs_fs_info *fs_info)
  149. {
  150. struct btrfs_block_rsv *delayed_rsv = &fs_info->delayed_refs_rsv;
  151. spin_lock(&delayed_rsv->lock);
  152. /*
  153. * Updating a block group item does not result in new nodes/leaves and
  154. * does not require changing the free space tree, only the extent tree
  155. * or the block group tree, so this is all we need.
  156. */
  157. delayed_rsv->size += btrfs_calc_metadata_size(fs_info, 1);
  158. delayed_rsv->full = false;
  159. spin_unlock(&delayed_rsv->lock);
  160. }
  161. /*
  162. * Adjust the size of the delayed refs block reserve to release space for 1
  163. * block group item update.
  164. */
  165. void btrfs_dec_delayed_refs_rsv_bg_updates(struct btrfs_fs_info *fs_info)
  166. {
  167. struct btrfs_block_rsv *delayed_rsv = &fs_info->delayed_refs_rsv;
  168. const u64 num_bytes = btrfs_calc_metadata_size(fs_info, 1);
  169. u64 released;
  170. released = btrfs_block_rsv_release(fs_info, delayed_rsv, num_bytes, NULL);
  171. if (released > 0)
  172. trace_btrfs_space_reservation(fs_info, "delayed_refs_rsv",
  173. 0, released, 0);
  174. }
  175. /*
  176. * Refill based on our delayed refs usage.
  177. *
  178. * @fs_info: the filesystem
  179. * @flush: control how we can flush for this reservation.
  180. *
  181. * This will refill the delayed block_rsv up to 1 items size worth of space and
  182. * will return -ENOSPC if we can't make the reservation.
  183. */
  184. int btrfs_delayed_refs_rsv_refill(struct btrfs_fs_info *fs_info,
  185. enum btrfs_reserve_flush_enum flush)
  186. {
  187. struct btrfs_block_rsv *block_rsv = &fs_info->delayed_refs_rsv;
  188. struct btrfs_space_info *space_info = block_rsv->space_info;
  189. u64 limit = btrfs_calc_delayed_ref_bytes(fs_info, 1);
  190. u64 num_bytes = 0;
  191. u64 refilled_bytes;
  192. u64 to_free;
  193. int ret = -ENOSPC;
  194. spin_lock(&block_rsv->lock);
  195. if (block_rsv->reserved < block_rsv->size) {
  196. num_bytes = block_rsv->size - block_rsv->reserved;
  197. num_bytes = min(num_bytes, limit);
  198. }
  199. spin_unlock(&block_rsv->lock);
  200. if (!num_bytes)
  201. return 0;
  202. ret = btrfs_reserve_metadata_bytes(fs_info, space_info, num_bytes, flush);
  203. if (ret)
  204. return ret;
  205. /*
  206. * We may have raced with someone else, so check again if we the block
  207. * reserve is still not full and release any excess space.
  208. */
  209. spin_lock(&block_rsv->lock);
  210. if (block_rsv->reserved < block_rsv->size) {
  211. u64 needed = block_rsv->size - block_rsv->reserved;
  212. if (num_bytes >= needed) {
  213. block_rsv->reserved += needed;
  214. block_rsv->full = true;
  215. to_free = num_bytes - needed;
  216. refilled_bytes = needed;
  217. } else {
  218. block_rsv->reserved += num_bytes;
  219. to_free = 0;
  220. refilled_bytes = num_bytes;
  221. }
  222. } else {
  223. to_free = num_bytes;
  224. refilled_bytes = 0;
  225. }
  226. spin_unlock(&block_rsv->lock);
  227. if (to_free > 0)
  228. btrfs_space_info_free_bytes_may_use(fs_info, space_info, to_free);
  229. if (refilled_bytes > 0)
  230. trace_btrfs_space_reservation(fs_info, "delayed_refs_rsv", 0,
  231. refilled_bytes, 1);
  232. return 0;
  233. }
  234. /*
  235. * compare two delayed data backrefs with same bytenr and type
  236. */
  237. static int comp_data_refs(struct btrfs_delayed_ref_node *ref1,
  238. struct btrfs_delayed_ref_node *ref2)
  239. {
  240. if (ref1->data_ref.objectid < ref2->data_ref.objectid)
  241. return -1;
  242. if (ref1->data_ref.objectid > ref2->data_ref.objectid)
  243. return 1;
  244. if (ref1->data_ref.offset < ref2->data_ref.offset)
  245. return -1;
  246. if (ref1->data_ref.offset > ref2->data_ref.offset)
  247. return 1;
  248. return 0;
  249. }
  250. static int comp_refs(struct btrfs_delayed_ref_node *ref1,
  251. struct btrfs_delayed_ref_node *ref2,
  252. bool check_seq)
  253. {
  254. int ret = 0;
  255. if (ref1->type < ref2->type)
  256. return -1;
  257. if (ref1->type > ref2->type)
  258. return 1;
  259. if (ref1->type == BTRFS_SHARED_BLOCK_REF_KEY ||
  260. ref1->type == BTRFS_SHARED_DATA_REF_KEY) {
  261. if (ref1->parent < ref2->parent)
  262. return -1;
  263. if (ref1->parent > ref2->parent)
  264. return 1;
  265. } else {
  266. if (ref1->ref_root < ref2->ref_root)
  267. return -1;
  268. if (ref1->ref_root > ref2->ref_root)
  269. return 1;
  270. if (ref1->type == BTRFS_EXTENT_DATA_REF_KEY)
  271. ret = comp_data_refs(ref1, ref2);
  272. }
  273. if (ret)
  274. return ret;
  275. if (check_seq) {
  276. if (ref1->seq < ref2->seq)
  277. return -1;
  278. if (ref1->seq > ref2->seq)
  279. return 1;
  280. }
  281. return 0;
  282. }
  283. /* insert a new ref to head ref rbtree */
  284. static struct btrfs_delayed_ref_head *htree_insert(struct rb_root_cached *root,
  285. struct rb_node *node)
  286. {
  287. struct rb_node **p = &root->rb_root.rb_node;
  288. struct rb_node *parent_node = NULL;
  289. struct btrfs_delayed_ref_head *entry;
  290. struct btrfs_delayed_ref_head *ins;
  291. u64 bytenr;
  292. bool leftmost = true;
  293. ins = rb_entry(node, struct btrfs_delayed_ref_head, href_node);
  294. bytenr = ins->bytenr;
  295. while (*p) {
  296. parent_node = *p;
  297. entry = rb_entry(parent_node, struct btrfs_delayed_ref_head,
  298. href_node);
  299. if (bytenr < entry->bytenr) {
  300. p = &(*p)->rb_left;
  301. } else if (bytenr > entry->bytenr) {
  302. p = &(*p)->rb_right;
  303. leftmost = false;
  304. } else {
  305. return entry;
  306. }
  307. }
  308. rb_link_node(node, parent_node, p);
  309. rb_insert_color_cached(node, root, leftmost);
  310. return NULL;
  311. }
  312. static struct btrfs_delayed_ref_node* tree_insert(struct rb_root_cached *root,
  313. struct btrfs_delayed_ref_node *ins)
  314. {
  315. struct rb_node **p = &root->rb_root.rb_node;
  316. struct rb_node *node = &ins->ref_node;
  317. struct rb_node *parent_node = NULL;
  318. struct btrfs_delayed_ref_node *entry;
  319. bool leftmost = true;
  320. while (*p) {
  321. int comp;
  322. parent_node = *p;
  323. entry = rb_entry(parent_node, struct btrfs_delayed_ref_node,
  324. ref_node);
  325. comp = comp_refs(ins, entry, true);
  326. if (comp < 0) {
  327. p = &(*p)->rb_left;
  328. } else if (comp > 0) {
  329. p = &(*p)->rb_right;
  330. leftmost = false;
  331. } else {
  332. return entry;
  333. }
  334. }
  335. rb_link_node(node, parent_node, p);
  336. rb_insert_color_cached(node, root, leftmost);
  337. return NULL;
  338. }
  339. static struct btrfs_delayed_ref_head *find_first_ref_head(
  340. struct btrfs_delayed_ref_root *dr)
  341. {
  342. struct rb_node *n;
  343. struct btrfs_delayed_ref_head *entry;
  344. n = rb_first_cached(&dr->href_root);
  345. if (!n)
  346. return NULL;
  347. entry = rb_entry(n, struct btrfs_delayed_ref_head, href_node);
  348. return entry;
  349. }
  350. /*
  351. * Find a head entry based on bytenr. This returns the delayed ref head if it
  352. * was able to find one, or NULL if nothing was in that spot. If return_bigger
  353. * is given, the next bigger entry is returned if no exact match is found.
  354. */
  355. static struct btrfs_delayed_ref_head *find_ref_head(
  356. struct btrfs_delayed_ref_root *dr, u64 bytenr,
  357. bool return_bigger)
  358. {
  359. struct rb_root *root = &dr->href_root.rb_root;
  360. struct rb_node *n;
  361. struct btrfs_delayed_ref_head *entry;
  362. n = root->rb_node;
  363. entry = NULL;
  364. while (n) {
  365. entry = rb_entry(n, struct btrfs_delayed_ref_head, href_node);
  366. if (bytenr < entry->bytenr)
  367. n = n->rb_left;
  368. else if (bytenr > entry->bytenr)
  369. n = n->rb_right;
  370. else
  371. return entry;
  372. }
  373. if (entry && return_bigger) {
  374. if (bytenr > entry->bytenr) {
  375. n = rb_next(&entry->href_node);
  376. if (!n)
  377. return NULL;
  378. entry = rb_entry(n, struct btrfs_delayed_ref_head,
  379. href_node);
  380. }
  381. return entry;
  382. }
  383. return NULL;
  384. }
  385. int btrfs_delayed_ref_lock(struct btrfs_delayed_ref_root *delayed_refs,
  386. struct btrfs_delayed_ref_head *head)
  387. {
  388. lockdep_assert_held(&delayed_refs->lock);
  389. if (mutex_trylock(&head->mutex))
  390. return 0;
  391. refcount_inc(&head->refs);
  392. spin_unlock(&delayed_refs->lock);
  393. mutex_lock(&head->mutex);
  394. spin_lock(&delayed_refs->lock);
  395. if (RB_EMPTY_NODE(&head->href_node)) {
  396. mutex_unlock(&head->mutex);
  397. btrfs_put_delayed_ref_head(head);
  398. return -EAGAIN;
  399. }
  400. btrfs_put_delayed_ref_head(head);
  401. return 0;
  402. }
  403. static inline void drop_delayed_ref(struct btrfs_fs_info *fs_info,
  404. struct btrfs_delayed_ref_root *delayed_refs,
  405. struct btrfs_delayed_ref_head *head,
  406. struct btrfs_delayed_ref_node *ref)
  407. {
  408. lockdep_assert_held(&head->lock);
  409. rb_erase_cached(&ref->ref_node, &head->ref_tree);
  410. RB_CLEAR_NODE(&ref->ref_node);
  411. if (!list_empty(&ref->add_list))
  412. list_del(&ref->add_list);
  413. btrfs_put_delayed_ref(ref);
  414. atomic_dec(&delayed_refs->num_entries);
  415. btrfs_delayed_refs_rsv_release(fs_info, 1, 0);
  416. }
  417. static bool merge_ref(struct btrfs_fs_info *fs_info,
  418. struct btrfs_delayed_ref_root *delayed_refs,
  419. struct btrfs_delayed_ref_head *head,
  420. struct btrfs_delayed_ref_node *ref,
  421. u64 seq)
  422. {
  423. struct btrfs_delayed_ref_node *next;
  424. struct rb_node *node = rb_next(&ref->ref_node);
  425. bool done = false;
  426. while (!done && node) {
  427. int mod;
  428. next = rb_entry(node, struct btrfs_delayed_ref_node, ref_node);
  429. node = rb_next(node);
  430. if (seq && next->seq >= seq)
  431. break;
  432. if (comp_refs(ref, next, false))
  433. break;
  434. if (ref->action == next->action) {
  435. mod = next->ref_mod;
  436. } else {
  437. if (ref->ref_mod < next->ref_mod) {
  438. swap(ref, next);
  439. done = true;
  440. }
  441. mod = -next->ref_mod;
  442. }
  443. drop_delayed_ref(fs_info, delayed_refs, head, next);
  444. ref->ref_mod += mod;
  445. if (ref->ref_mod == 0) {
  446. drop_delayed_ref(fs_info, delayed_refs, head, ref);
  447. done = true;
  448. } else {
  449. /*
  450. * Can't have multiples of the same ref on a tree block.
  451. */
  452. WARN_ON(ref->type == BTRFS_TREE_BLOCK_REF_KEY ||
  453. ref->type == BTRFS_SHARED_BLOCK_REF_KEY);
  454. }
  455. }
  456. return done;
  457. }
  458. void btrfs_merge_delayed_refs(struct btrfs_fs_info *fs_info,
  459. struct btrfs_delayed_ref_root *delayed_refs,
  460. struct btrfs_delayed_ref_head *head)
  461. {
  462. struct btrfs_delayed_ref_node *ref;
  463. struct rb_node *node;
  464. u64 seq = 0;
  465. lockdep_assert_held(&head->lock);
  466. if (RB_EMPTY_ROOT(&head->ref_tree.rb_root))
  467. return;
  468. /* We don't have too many refs to merge for data. */
  469. if (head->is_data)
  470. return;
  471. seq = btrfs_tree_mod_log_lowest_seq(fs_info);
  472. again:
  473. for (node = rb_first_cached(&head->ref_tree); node;
  474. node = rb_next(node)) {
  475. ref = rb_entry(node, struct btrfs_delayed_ref_node, ref_node);
  476. if (seq && ref->seq >= seq)
  477. continue;
  478. if (merge_ref(fs_info, delayed_refs, head, ref, seq))
  479. goto again;
  480. }
  481. }
  482. int btrfs_check_delayed_seq(struct btrfs_fs_info *fs_info, u64 seq)
  483. {
  484. int ret = 0;
  485. u64 min_seq = btrfs_tree_mod_log_lowest_seq(fs_info);
  486. if (min_seq != 0 && seq >= min_seq) {
  487. btrfs_debug(fs_info,
  488. "holding back delayed_ref %llu, lowest is %llu",
  489. seq, min_seq);
  490. ret = 1;
  491. }
  492. return ret;
  493. }
  494. struct btrfs_delayed_ref_head *btrfs_select_ref_head(
  495. struct btrfs_delayed_ref_root *delayed_refs)
  496. {
  497. struct btrfs_delayed_ref_head *head;
  498. lockdep_assert_held(&delayed_refs->lock);
  499. again:
  500. head = find_ref_head(delayed_refs, delayed_refs->run_delayed_start,
  501. true);
  502. if (!head && delayed_refs->run_delayed_start != 0) {
  503. delayed_refs->run_delayed_start = 0;
  504. head = find_first_ref_head(delayed_refs);
  505. }
  506. if (!head)
  507. return NULL;
  508. while (head->processing) {
  509. struct rb_node *node;
  510. node = rb_next(&head->href_node);
  511. if (!node) {
  512. if (delayed_refs->run_delayed_start == 0)
  513. return NULL;
  514. delayed_refs->run_delayed_start = 0;
  515. goto again;
  516. }
  517. head = rb_entry(node, struct btrfs_delayed_ref_head,
  518. href_node);
  519. }
  520. head->processing = true;
  521. WARN_ON(delayed_refs->num_heads_ready == 0);
  522. delayed_refs->num_heads_ready--;
  523. delayed_refs->run_delayed_start = head->bytenr +
  524. head->num_bytes;
  525. return head;
  526. }
  527. void btrfs_delete_ref_head(struct btrfs_delayed_ref_root *delayed_refs,
  528. struct btrfs_delayed_ref_head *head)
  529. {
  530. lockdep_assert_held(&delayed_refs->lock);
  531. lockdep_assert_held(&head->lock);
  532. rb_erase_cached(&head->href_node, &delayed_refs->href_root);
  533. RB_CLEAR_NODE(&head->href_node);
  534. atomic_dec(&delayed_refs->num_entries);
  535. delayed_refs->num_heads--;
  536. if (!head->processing)
  537. delayed_refs->num_heads_ready--;
  538. }
  539. /*
  540. * Helper to insert the ref_node to the tail or merge with tail.
  541. *
  542. * Return false if the ref was inserted.
  543. * Return true if the ref was merged into an existing one (and therefore can be
  544. * freed by the caller).
  545. */
  546. static bool insert_delayed_ref(struct btrfs_trans_handle *trans,
  547. struct btrfs_delayed_ref_head *href,
  548. struct btrfs_delayed_ref_node *ref)
  549. {
  550. struct btrfs_delayed_ref_root *root = &trans->transaction->delayed_refs;
  551. struct btrfs_delayed_ref_node *exist;
  552. int mod;
  553. spin_lock(&href->lock);
  554. exist = tree_insert(&href->ref_tree, ref);
  555. if (!exist) {
  556. if (ref->action == BTRFS_ADD_DELAYED_REF)
  557. list_add_tail(&ref->add_list, &href->ref_add_list);
  558. atomic_inc(&root->num_entries);
  559. spin_unlock(&href->lock);
  560. trans->delayed_ref_updates++;
  561. return false;
  562. }
  563. /* Now we are sure we can merge */
  564. if (exist->action == ref->action) {
  565. mod = ref->ref_mod;
  566. } else {
  567. /* Need to change action */
  568. if (exist->ref_mod < ref->ref_mod) {
  569. exist->action = ref->action;
  570. mod = -exist->ref_mod;
  571. exist->ref_mod = ref->ref_mod;
  572. if (ref->action == BTRFS_ADD_DELAYED_REF)
  573. list_add_tail(&exist->add_list,
  574. &href->ref_add_list);
  575. else if (ref->action == BTRFS_DROP_DELAYED_REF) {
  576. ASSERT(!list_empty(&exist->add_list));
  577. list_del_init(&exist->add_list);
  578. } else {
  579. ASSERT(0);
  580. }
  581. } else
  582. mod = -ref->ref_mod;
  583. }
  584. exist->ref_mod += mod;
  585. /* remove existing tail if its ref_mod is zero */
  586. if (exist->ref_mod == 0)
  587. drop_delayed_ref(trans->fs_info, root, href, exist);
  588. spin_unlock(&href->lock);
  589. return true;
  590. }
  591. /*
  592. * helper function to update the accounting in the head ref
  593. * existing and update must have the same bytenr
  594. */
  595. static noinline void update_existing_head_ref(struct btrfs_trans_handle *trans,
  596. struct btrfs_delayed_ref_head *existing,
  597. struct btrfs_delayed_ref_head *update)
  598. {
  599. struct btrfs_delayed_ref_root *delayed_refs =
  600. &trans->transaction->delayed_refs;
  601. struct btrfs_fs_info *fs_info = trans->fs_info;
  602. int old_ref_mod;
  603. BUG_ON(existing->is_data != update->is_data);
  604. spin_lock(&existing->lock);
  605. /*
  606. * When freeing an extent, we may not know the owning root when we
  607. * first create the head_ref. However, some deref before the last deref
  608. * will know it, so we just need to update the head_ref accordingly.
  609. */
  610. if (!existing->owning_root)
  611. existing->owning_root = update->owning_root;
  612. if (update->must_insert_reserved) {
  613. /* if the extent was freed and then
  614. * reallocated before the delayed ref
  615. * entries were processed, we can end up
  616. * with an existing head ref without
  617. * the must_insert_reserved flag set.
  618. * Set it again here
  619. */
  620. existing->must_insert_reserved = update->must_insert_reserved;
  621. existing->owning_root = update->owning_root;
  622. /*
  623. * update the num_bytes so we make sure the accounting
  624. * is done correctly
  625. */
  626. existing->num_bytes = update->num_bytes;
  627. }
  628. if (update->extent_op) {
  629. if (!existing->extent_op) {
  630. existing->extent_op = update->extent_op;
  631. } else {
  632. if (update->extent_op->update_key) {
  633. memcpy(&existing->extent_op->key,
  634. &update->extent_op->key,
  635. sizeof(update->extent_op->key));
  636. existing->extent_op->update_key = true;
  637. }
  638. if (update->extent_op->update_flags) {
  639. existing->extent_op->flags_to_set |=
  640. update->extent_op->flags_to_set;
  641. existing->extent_op->update_flags = true;
  642. }
  643. btrfs_free_delayed_extent_op(update->extent_op);
  644. }
  645. }
  646. /*
  647. * update the reference mod on the head to reflect this new operation,
  648. * only need the lock for this case cause we could be processing it
  649. * currently, for refs we just added we know we're a-ok.
  650. */
  651. old_ref_mod = existing->total_ref_mod;
  652. existing->ref_mod += update->ref_mod;
  653. existing->total_ref_mod += update->ref_mod;
  654. /*
  655. * If we are going to from a positive ref mod to a negative or vice
  656. * versa we need to make sure to adjust pending_csums accordingly.
  657. * We reserve bytes for csum deletion when adding or updating a ref head
  658. * see add_delayed_ref_head() for more details.
  659. */
  660. if (existing->is_data) {
  661. u64 csum_leaves =
  662. btrfs_csum_bytes_to_leaves(fs_info,
  663. existing->num_bytes);
  664. if (existing->total_ref_mod >= 0 && old_ref_mod < 0) {
  665. delayed_refs->pending_csums -= existing->num_bytes;
  666. btrfs_delayed_refs_rsv_release(fs_info, 0, csum_leaves);
  667. }
  668. if (existing->total_ref_mod < 0 && old_ref_mod >= 0) {
  669. delayed_refs->pending_csums += existing->num_bytes;
  670. trans->delayed_ref_csum_deletions += csum_leaves;
  671. }
  672. }
  673. spin_unlock(&existing->lock);
  674. }
  675. static void init_delayed_ref_head(struct btrfs_delayed_ref_head *head_ref,
  676. struct btrfs_ref *generic_ref,
  677. struct btrfs_qgroup_extent_record *qrecord,
  678. u64 reserved)
  679. {
  680. int count_mod = 1;
  681. bool must_insert_reserved = false;
  682. /* If reserved is provided, it must be a data extent. */
  683. BUG_ON(generic_ref->type != BTRFS_REF_DATA && reserved);
  684. switch (generic_ref->action) {
  685. case BTRFS_ADD_DELAYED_REF:
  686. /* count_mod is already set to 1. */
  687. break;
  688. case BTRFS_UPDATE_DELAYED_HEAD:
  689. count_mod = 0;
  690. break;
  691. case BTRFS_DROP_DELAYED_REF:
  692. /*
  693. * The head node stores the sum of all the mods, so dropping a ref
  694. * should drop the sum in the head node by one.
  695. */
  696. count_mod = -1;
  697. break;
  698. case BTRFS_ADD_DELAYED_EXTENT:
  699. /*
  700. * BTRFS_ADD_DELAYED_EXTENT means that we need to update the
  701. * reserved accounting when the extent is finally added, or if a
  702. * later modification deletes the delayed ref without ever
  703. * inserting the extent into the extent allocation tree.
  704. * ref->must_insert_reserved is the flag used to record that
  705. * accounting mods are required.
  706. *
  707. * Once we record must_insert_reserved, switch the action to
  708. * BTRFS_ADD_DELAYED_REF because other special casing is not
  709. * required.
  710. */
  711. must_insert_reserved = true;
  712. break;
  713. }
  714. refcount_set(&head_ref->refs, 1);
  715. head_ref->bytenr = generic_ref->bytenr;
  716. head_ref->num_bytes = generic_ref->num_bytes;
  717. head_ref->ref_mod = count_mod;
  718. head_ref->reserved_bytes = reserved;
  719. head_ref->must_insert_reserved = must_insert_reserved;
  720. head_ref->owning_root = generic_ref->owning_root;
  721. head_ref->is_data = (generic_ref->type == BTRFS_REF_DATA);
  722. head_ref->is_system = (generic_ref->ref_root == BTRFS_CHUNK_TREE_OBJECTID);
  723. head_ref->ref_tree = RB_ROOT_CACHED;
  724. INIT_LIST_HEAD(&head_ref->ref_add_list);
  725. RB_CLEAR_NODE(&head_ref->href_node);
  726. head_ref->processing = false;
  727. head_ref->total_ref_mod = count_mod;
  728. spin_lock_init(&head_ref->lock);
  729. mutex_init(&head_ref->mutex);
  730. /* If not metadata set an impossible level to help debugging. */
  731. if (generic_ref->type == BTRFS_REF_METADATA)
  732. head_ref->level = generic_ref->tree_ref.level;
  733. else
  734. head_ref->level = U8_MAX;
  735. if (qrecord) {
  736. if (generic_ref->ref_root && reserved) {
  737. qrecord->data_rsv = reserved;
  738. qrecord->data_rsv_refroot = generic_ref->ref_root;
  739. }
  740. qrecord->bytenr = generic_ref->bytenr;
  741. qrecord->num_bytes = generic_ref->num_bytes;
  742. qrecord->old_roots = NULL;
  743. }
  744. }
  745. /*
  746. * helper function to actually insert a head node into the rbtree.
  747. * this does all the dirty work in terms of maintaining the correct
  748. * overall modification count.
  749. *
  750. * Returns an error pointer in case of an error.
  751. */
  752. static noinline struct btrfs_delayed_ref_head *
  753. add_delayed_ref_head(struct btrfs_trans_handle *trans,
  754. struct btrfs_delayed_ref_head *head_ref,
  755. struct btrfs_qgroup_extent_record *qrecord,
  756. int action, bool *qrecord_inserted_ret)
  757. {
  758. struct btrfs_fs_info *fs_info = trans->fs_info;
  759. struct btrfs_delayed_ref_head *existing;
  760. struct btrfs_delayed_ref_root *delayed_refs;
  761. bool qrecord_inserted = false;
  762. delayed_refs = &trans->transaction->delayed_refs;
  763. /* Record qgroup extent info if provided */
  764. if (qrecord) {
  765. int ret;
  766. ret = btrfs_qgroup_trace_extent_nolock(fs_info, delayed_refs, qrecord);
  767. if (ret) {
  768. /* Clean up if insertion fails or item exists. */
  769. xa_release(&delayed_refs->dirty_extents,
  770. qrecord->bytenr >> fs_info->sectorsize_bits);
  771. /* Caller responsible for freeing qrecord on error. */
  772. if (ret < 0)
  773. return ERR_PTR(ret);
  774. kfree(qrecord);
  775. } else {
  776. qrecord_inserted = true;
  777. }
  778. }
  779. trace_add_delayed_ref_head(fs_info, head_ref, action);
  780. existing = htree_insert(&delayed_refs->href_root,
  781. &head_ref->href_node);
  782. if (existing) {
  783. update_existing_head_ref(trans, existing, head_ref);
  784. /*
  785. * we've updated the existing ref, free the newly
  786. * allocated ref
  787. */
  788. kmem_cache_free(btrfs_delayed_ref_head_cachep, head_ref);
  789. head_ref = existing;
  790. } else {
  791. /*
  792. * We reserve the amount of bytes needed to delete csums when
  793. * adding the ref head and not when adding individual drop refs
  794. * since the csum items are deleted only after running the last
  795. * delayed drop ref (the data extent's ref count drops to 0).
  796. */
  797. if (head_ref->is_data && head_ref->ref_mod < 0) {
  798. delayed_refs->pending_csums += head_ref->num_bytes;
  799. trans->delayed_ref_csum_deletions +=
  800. btrfs_csum_bytes_to_leaves(fs_info, head_ref->num_bytes);
  801. }
  802. delayed_refs->num_heads++;
  803. delayed_refs->num_heads_ready++;
  804. atomic_inc(&delayed_refs->num_entries);
  805. }
  806. if (qrecord_inserted_ret)
  807. *qrecord_inserted_ret = qrecord_inserted;
  808. return head_ref;
  809. }
  810. /*
  811. * Initialize the structure which represents a modification to a an extent.
  812. *
  813. * @fs_info: Internal to the mounted filesystem mount structure.
  814. *
  815. * @ref: The structure which is going to be initialized.
  816. *
  817. * @bytenr: The logical address of the extent for which a modification is
  818. * going to be recorded.
  819. *
  820. * @num_bytes: Size of the extent whose modification is being recorded.
  821. *
  822. * @ref_root: The id of the root where this modification has originated, this
  823. * can be either one of the well-known metadata trees or the
  824. * subvolume id which references this extent.
  825. *
  826. * @action: Can be one of BTRFS_ADD_DELAYED_REF/BTRFS_DROP_DELAYED_REF or
  827. * BTRFS_ADD_DELAYED_EXTENT
  828. *
  829. * @ref_type: Holds the type of the extent which is being recorded, can be
  830. * one of BTRFS_SHARED_BLOCK_REF_KEY/BTRFS_TREE_BLOCK_REF_KEY
  831. * when recording a metadata extent or BTRFS_SHARED_DATA_REF_KEY/
  832. * BTRFS_EXTENT_DATA_REF_KEY when recording data extent
  833. */
  834. static void init_delayed_ref_common(struct btrfs_fs_info *fs_info,
  835. struct btrfs_delayed_ref_node *ref,
  836. struct btrfs_ref *generic_ref)
  837. {
  838. int action = generic_ref->action;
  839. u64 seq = 0;
  840. if (action == BTRFS_ADD_DELAYED_EXTENT)
  841. action = BTRFS_ADD_DELAYED_REF;
  842. if (is_fstree(generic_ref->ref_root))
  843. seq = atomic64_read(&fs_info->tree_mod_seq);
  844. refcount_set(&ref->refs, 1);
  845. ref->bytenr = generic_ref->bytenr;
  846. ref->num_bytes = generic_ref->num_bytes;
  847. ref->ref_mod = 1;
  848. ref->action = action;
  849. ref->seq = seq;
  850. ref->type = btrfs_ref_type(generic_ref);
  851. ref->ref_root = generic_ref->ref_root;
  852. ref->parent = generic_ref->parent;
  853. RB_CLEAR_NODE(&ref->ref_node);
  854. INIT_LIST_HEAD(&ref->add_list);
  855. if (generic_ref->type == BTRFS_REF_DATA)
  856. ref->data_ref = generic_ref->data_ref;
  857. else
  858. ref->tree_ref = generic_ref->tree_ref;
  859. }
  860. void btrfs_init_tree_ref(struct btrfs_ref *generic_ref, int level, u64 mod_root,
  861. bool skip_qgroup)
  862. {
  863. #ifdef CONFIG_BTRFS_FS_REF_VERIFY
  864. /* If @real_root not set, use @root as fallback */
  865. generic_ref->real_root = mod_root ?: generic_ref->ref_root;
  866. #endif
  867. generic_ref->tree_ref.level = level;
  868. generic_ref->type = BTRFS_REF_METADATA;
  869. if (skip_qgroup || !(is_fstree(generic_ref->ref_root) &&
  870. (!mod_root || is_fstree(mod_root))))
  871. generic_ref->skip_qgroup = true;
  872. else
  873. generic_ref->skip_qgroup = false;
  874. }
  875. void btrfs_init_data_ref(struct btrfs_ref *generic_ref, u64 ino, u64 offset,
  876. u64 mod_root, bool skip_qgroup)
  877. {
  878. #ifdef CONFIG_BTRFS_FS_REF_VERIFY
  879. /* If @real_root not set, use @root as fallback */
  880. generic_ref->real_root = mod_root ?: generic_ref->ref_root;
  881. #endif
  882. generic_ref->data_ref.objectid = ino;
  883. generic_ref->data_ref.offset = offset;
  884. generic_ref->type = BTRFS_REF_DATA;
  885. if (skip_qgroup || !(is_fstree(generic_ref->ref_root) &&
  886. (!mod_root || is_fstree(mod_root))))
  887. generic_ref->skip_qgroup = true;
  888. else
  889. generic_ref->skip_qgroup = false;
  890. }
  891. static int add_delayed_ref(struct btrfs_trans_handle *trans,
  892. struct btrfs_ref *generic_ref,
  893. struct btrfs_delayed_extent_op *extent_op,
  894. u64 reserved)
  895. {
  896. struct btrfs_fs_info *fs_info = trans->fs_info;
  897. struct btrfs_delayed_ref_node *node;
  898. struct btrfs_delayed_ref_head *head_ref;
  899. struct btrfs_delayed_ref_head *new_head_ref;
  900. struct btrfs_delayed_ref_root *delayed_refs;
  901. struct btrfs_qgroup_extent_record *record = NULL;
  902. bool qrecord_inserted;
  903. int action = generic_ref->action;
  904. bool merged;
  905. int ret;
  906. node = kmem_cache_alloc(btrfs_delayed_ref_node_cachep, GFP_NOFS);
  907. if (!node)
  908. return -ENOMEM;
  909. head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS);
  910. if (!head_ref) {
  911. ret = -ENOMEM;
  912. goto free_node;
  913. }
  914. if (btrfs_qgroup_full_accounting(fs_info) && !generic_ref->skip_qgroup) {
  915. record = kzalloc(sizeof(*record), GFP_NOFS);
  916. if (!record) {
  917. ret = -ENOMEM;
  918. goto free_head_ref;
  919. }
  920. if (xa_reserve(&trans->transaction->delayed_refs.dirty_extents,
  921. generic_ref->bytenr >> fs_info->sectorsize_bits,
  922. GFP_NOFS)) {
  923. ret = -ENOMEM;
  924. goto free_record;
  925. }
  926. }
  927. init_delayed_ref_common(fs_info, node, generic_ref);
  928. init_delayed_ref_head(head_ref, generic_ref, record, reserved);
  929. head_ref->extent_op = extent_op;
  930. delayed_refs = &trans->transaction->delayed_refs;
  931. spin_lock(&delayed_refs->lock);
  932. /*
  933. * insert both the head node and the new ref without dropping
  934. * the spin lock
  935. */
  936. new_head_ref = add_delayed_ref_head(trans, head_ref, record,
  937. action, &qrecord_inserted);
  938. if (IS_ERR(new_head_ref)) {
  939. spin_unlock(&delayed_refs->lock);
  940. ret = PTR_ERR(new_head_ref);
  941. goto free_record;
  942. }
  943. head_ref = new_head_ref;
  944. merged = insert_delayed_ref(trans, head_ref, node);
  945. spin_unlock(&delayed_refs->lock);
  946. /*
  947. * Need to update the delayed_refs_rsv with any changes we may have
  948. * made.
  949. */
  950. btrfs_update_delayed_refs_rsv(trans);
  951. if (generic_ref->type == BTRFS_REF_DATA)
  952. trace_add_delayed_data_ref(trans->fs_info, node);
  953. else
  954. trace_add_delayed_tree_ref(trans->fs_info, node);
  955. if (merged)
  956. kmem_cache_free(btrfs_delayed_ref_node_cachep, node);
  957. if (qrecord_inserted)
  958. return btrfs_qgroup_trace_extent_post(trans, record);
  959. return 0;
  960. free_record:
  961. kfree(record);
  962. free_head_ref:
  963. kmem_cache_free(btrfs_delayed_ref_head_cachep, head_ref);
  964. free_node:
  965. kmem_cache_free(btrfs_delayed_ref_node_cachep, node);
  966. return ret;
  967. }
  968. /*
  969. * Add a delayed tree ref. This does all of the accounting required to make sure
  970. * the delayed ref is eventually processed before this transaction commits.
  971. */
  972. int btrfs_add_delayed_tree_ref(struct btrfs_trans_handle *trans,
  973. struct btrfs_ref *generic_ref,
  974. struct btrfs_delayed_extent_op *extent_op)
  975. {
  976. ASSERT(generic_ref->type == BTRFS_REF_METADATA && generic_ref->action);
  977. return add_delayed_ref(trans, generic_ref, extent_op, 0);
  978. }
  979. /*
  980. * add a delayed data ref. it's similar to btrfs_add_delayed_tree_ref.
  981. */
  982. int btrfs_add_delayed_data_ref(struct btrfs_trans_handle *trans,
  983. struct btrfs_ref *generic_ref,
  984. u64 reserved)
  985. {
  986. ASSERT(generic_ref->type == BTRFS_REF_DATA && generic_ref->action);
  987. return add_delayed_ref(trans, generic_ref, NULL, reserved);
  988. }
  989. int btrfs_add_delayed_extent_op(struct btrfs_trans_handle *trans,
  990. u64 bytenr, u64 num_bytes, u8 level,
  991. struct btrfs_delayed_extent_op *extent_op)
  992. {
  993. struct btrfs_delayed_ref_head *head_ref;
  994. struct btrfs_delayed_ref_head *head_ref_ret;
  995. struct btrfs_delayed_ref_root *delayed_refs;
  996. struct btrfs_ref generic_ref = {
  997. .type = BTRFS_REF_METADATA,
  998. .action = BTRFS_UPDATE_DELAYED_HEAD,
  999. .bytenr = bytenr,
  1000. .num_bytes = num_bytes,
  1001. .tree_ref.level = level,
  1002. };
  1003. head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS);
  1004. if (!head_ref)
  1005. return -ENOMEM;
  1006. init_delayed_ref_head(head_ref, &generic_ref, NULL, 0);
  1007. head_ref->extent_op = extent_op;
  1008. delayed_refs = &trans->transaction->delayed_refs;
  1009. spin_lock(&delayed_refs->lock);
  1010. head_ref_ret = add_delayed_ref_head(trans, head_ref, NULL,
  1011. BTRFS_UPDATE_DELAYED_HEAD, NULL);
  1012. spin_unlock(&delayed_refs->lock);
  1013. if (IS_ERR(head_ref_ret)) {
  1014. kmem_cache_free(btrfs_delayed_ref_head_cachep, head_ref);
  1015. return PTR_ERR(head_ref_ret);
  1016. }
  1017. /*
  1018. * Need to update the delayed_refs_rsv with any changes we may have
  1019. * made.
  1020. */
  1021. btrfs_update_delayed_refs_rsv(trans);
  1022. return 0;
  1023. }
  1024. void btrfs_put_delayed_ref(struct btrfs_delayed_ref_node *ref)
  1025. {
  1026. if (refcount_dec_and_test(&ref->refs)) {
  1027. WARN_ON(!RB_EMPTY_NODE(&ref->ref_node));
  1028. kmem_cache_free(btrfs_delayed_ref_node_cachep, ref);
  1029. }
  1030. }
  1031. /*
  1032. * This does a simple search for the head node for a given extent. Returns the
  1033. * head node if found, or NULL if not.
  1034. */
  1035. struct btrfs_delayed_ref_head *
  1036. btrfs_find_delayed_ref_head(struct btrfs_delayed_ref_root *delayed_refs, u64 bytenr)
  1037. {
  1038. lockdep_assert_held(&delayed_refs->lock);
  1039. return find_ref_head(delayed_refs, bytenr, false);
  1040. }
  1041. static int find_comp(struct btrfs_delayed_ref_node *entry, u64 root, u64 parent)
  1042. {
  1043. int type = parent ? BTRFS_SHARED_BLOCK_REF_KEY : BTRFS_TREE_BLOCK_REF_KEY;
  1044. if (type < entry->type)
  1045. return -1;
  1046. if (type > entry->type)
  1047. return 1;
  1048. if (type == BTRFS_TREE_BLOCK_REF_KEY) {
  1049. if (root < entry->ref_root)
  1050. return -1;
  1051. if (root > entry->ref_root)
  1052. return 1;
  1053. } else {
  1054. if (parent < entry->parent)
  1055. return -1;
  1056. if (parent > entry->parent)
  1057. return 1;
  1058. }
  1059. return 0;
  1060. }
  1061. /*
  1062. * Check to see if a given root/parent reference is attached to the head. This
  1063. * only checks for BTRFS_ADD_DELAYED_REF references that match, as that
  1064. * indicates the reference exists for the given root or parent. This is for
  1065. * tree blocks only.
  1066. *
  1067. * @head: the head of the bytenr we're searching.
  1068. * @root: the root objectid of the reference if it is a normal reference.
  1069. * @parent: the parent if this is a shared backref.
  1070. */
  1071. bool btrfs_find_delayed_tree_ref(struct btrfs_delayed_ref_head *head,
  1072. u64 root, u64 parent)
  1073. {
  1074. struct rb_node *node;
  1075. bool found = false;
  1076. lockdep_assert_held(&head->mutex);
  1077. spin_lock(&head->lock);
  1078. node = head->ref_tree.rb_root.rb_node;
  1079. while (node) {
  1080. struct btrfs_delayed_ref_node *entry;
  1081. int ret;
  1082. entry = rb_entry(node, struct btrfs_delayed_ref_node, ref_node);
  1083. ret = find_comp(entry, root, parent);
  1084. if (ret < 0) {
  1085. node = node->rb_left;
  1086. } else if (ret > 0) {
  1087. node = node->rb_right;
  1088. } else {
  1089. /*
  1090. * We only want to count ADD actions, as drops mean the
  1091. * ref doesn't exist.
  1092. */
  1093. if (entry->action == BTRFS_ADD_DELAYED_REF)
  1094. found = true;
  1095. break;
  1096. }
  1097. }
  1098. spin_unlock(&head->lock);
  1099. return found;
  1100. }
  1101. void __cold btrfs_delayed_ref_exit(void)
  1102. {
  1103. kmem_cache_destroy(btrfs_delayed_ref_head_cachep);
  1104. kmem_cache_destroy(btrfs_delayed_ref_node_cachep);
  1105. kmem_cache_destroy(btrfs_delayed_extent_op_cachep);
  1106. }
  1107. int __init btrfs_delayed_ref_init(void)
  1108. {
  1109. btrfs_delayed_ref_head_cachep = KMEM_CACHE(btrfs_delayed_ref_head, 0);
  1110. if (!btrfs_delayed_ref_head_cachep)
  1111. goto fail;
  1112. btrfs_delayed_ref_node_cachep = KMEM_CACHE(btrfs_delayed_ref_node, 0);
  1113. if (!btrfs_delayed_ref_node_cachep)
  1114. goto fail;
  1115. btrfs_delayed_extent_op_cachep = KMEM_CACHE(btrfs_delayed_extent_op, 0);
  1116. if (!btrfs_delayed_extent_op_cachep)
  1117. goto fail;
  1118. return 0;
  1119. fail:
  1120. btrfs_delayed_ref_exit();
  1121. return -ENOMEM;
  1122. }