delayed-ref.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950
  1. /*
  2. * Copyright (C) 2009 Oracle. All rights reserved.
  3. *
  4. * This program is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU General Public
  6. * License v2 as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. * General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public
  14. * License along with this program; if not, write to the
  15. * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  16. * Boston, MA 021110-1307, USA.
  17. */
  18. #include <linux/sched.h>
  19. #include <linux/slab.h>
  20. #include <linux/sort.h>
  21. #include "ctree.h"
  22. #include "delayed-ref.h"
  23. #include "transaction.h"
  24. struct kmem_cache *btrfs_delayed_ref_head_cachep;
  25. struct kmem_cache *btrfs_delayed_tree_ref_cachep;
  26. struct kmem_cache *btrfs_delayed_data_ref_cachep;
  27. struct kmem_cache *btrfs_delayed_extent_op_cachep;
  28. /*
  29. * delayed back reference update tracking. For subvolume trees
  30. * we queue up extent allocations and backref maintenance for
  31. * delayed processing. This avoids deep call chains where we
  32. * add extents in the middle of btrfs_search_slot, and it allows
  33. * us to buffer up frequently modified backrefs in an rb tree instead
  34. * of hammering updates on the extent allocation tree.
  35. */
  36. /*
  37. * compare two delayed tree backrefs with same bytenr and type
  38. */
  39. static int comp_tree_refs(struct btrfs_delayed_tree_ref *ref2,
  40. struct btrfs_delayed_tree_ref *ref1, int type)
  41. {
  42. if (type == BTRFS_TREE_BLOCK_REF_KEY) {
  43. if (ref1->root < ref2->root)
  44. return -1;
  45. if (ref1->root > ref2->root)
  46. return 1;
  47. } else {
  48. if (ref1->parent < ref2->parent)
  49. return -1;
  50. if (ref1->parent > ref2->parent)
  51. return 1;
  52. }
  53. return 0;
  54. }
  55. /*
  56. * compare two delayed data backrefs with same bytenr and type
  57. */
  58. static int comp_data_refs(struct btrfs_delayed_data_ref *ref2,
  59. struct btrfs_delayed_data_ref *ref1)
  60. {
  61. if (ref1->node.type == BTRFS_EXTENT_DATA_REF_KEY) {
  62. if (ref1->root < ref2->root)
  63. return -1;
  64. if (ref1->root > ref2->root)
  65. return 1;
  66. if (ref1->objectid < ref2->objectid)
  67. return -1;
  68. if (ref1->objectid > ref2->objectid)
  69. return 1;
  70. if (ref1->offset < ref2->offset)
  71. return -1;
  72. if (ref1->offset > ref2->offset)
  73. return 1;
  74. } else {
  75. if (ref1->parent < ref2->parent)
  76. return -1;
  77. if (ref1->parent > ref2->parent)
  78. return 1;
  79. }
  80. return 0;
  81. }
  82. /*
  83. * entries in the rb tree are ordered by the byte number of the extent,
  84. * type of the delayed backrefs and content of delayed backrefs.
  85. */
  86. static int comp_entry(struct btrfs_delayed_ref_node *ref2,
  87. struct btrfs_delayed_ref_node *ref1,
  88. bool compare_seq)
  89. {
  90. if (ref1->bytenr < ref2->bytenr)
  91. return -1;
  92. if (ref1->bytenr > ref2->bytenr)
  93. return 1;
  94. if (ref1->is_head && ref2->is_head)
  95. return 0;
  96. if (ref2->is_head)
  97. return -1;
  98. if (ref1->is_head)
  99. return 1;
  100. if (ref1->type < ref2->type)
  101. return -1;
  102. if (ref1->type > ref2->type)
  103. return 1;
  104. /* merging of sequenced refs is not allowed */
  105. if (compare_seq) {
  106. if (ref1->seq < ref2->seq)
  107. return -1;
  108. if (ref1->seq > ref2->seq)
  109. return 1;
  110. }
  111. if (ref1->type == BTRFS_TREE_BLOCK_REF_KEY ||
  112. ref1->type == BTRFS_SHARED_BLOCK_REF_KEY) {
  113. return comp_tree_refs(btrfs_delayed_node_to_tree_ref(ref2),
  114. btrfs_delayed_node_to_tree_ref(ref1),
  115. ref1->type);
  116. } else if (ref1->type == BTRFS_EXTENT_DATA_REF_KEY ||
  117. ref1->type == BTRFS_SHARED_DATA_REF_KEY) {
  118. return comp_data_refs(btrfs_delayed_node_to_data_ref(ref2),
  119. btrfs_delayed_node_to_data_ref(ref1));
  120. }
  121. BUG();
  122. return 0;
  123. }
  124. /*
  125. * insert a new ref into the rbtree. This returns any existing refs
  126. * for the same (bytenr,parent) tuple, or NULL if the new node was properly
  127. * inserted.
  128. */
  129. static struct btrfs_delayed_ref_node *tree_insert(struct rb_root *root,
  130. struct rb_node *node)
  131. {
  132. struct rb_node **p = &root->rb_node;
  133. struct rb_node *parent_node = NULL;
  134. struct btrfs_delayed_ref_node *entry;
  135. struct btrfs_delayed_ref_node *ins;
  136. int cmp;
  137. ins = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
  138. while (*p) {
  139. parent_node = *p;
  140. entry = rb_entry(parent_node, struct btrfs_delayed_ref_node,
  141. rb_node);
  142. cmp = comp_entry(entry, ins, 1);
  143. if (cmp < 0)
  144. p = &(*p)->rb_left;
  145. else if (cmp > 0)
  146. p = &(*p)->rb_right;
  147. else
  148. return entry;
  149. }
  150. rb_link_node(node, parent_node, p);
  151. rb_insert_color(node, root);
  152. return NULL;
  153. }
  154. /* insert a new ref to head ref rbtree */
  155. static struct btrfs_delayed_ref_head *htree_insert(struct rb_root *root,
  156. struct rb_node *node)
  157. {
  158. struct rb_node **p = &root->rb_node;
  159. struct rb_node *parent_node = NULL;
  160. struct btrfs_delayed_ref_head *entry;
  161. struct btrfs_delayed_ref_head *ins;
  162. u64 bytenr;
  163. ins = rb_entry(node, struct btrfs_delayed_ref_head, href_node);
  164. bytenr = ins->node.bytenr;
  165. while (*p) {
  166. parent_node = *p;
  167. entry = rb_entry(parent_node, struct btrfs_delayed_ref_head,
  168. href_node);
  169. if (bytenr < entry->node.bytenr)
  170. p = &(*p)->rb_left;
  171. else if (bytenr > entry->node.bytenr)
  172. p = &(*p)->rb_right;
  173. else
  174. return entry;
  175. }
  176. rb_link_node(node, parent_node, p);
  177. rb_insert_color(node, root);
  178. return NULL;
  179. }
  180. /*
  181. * find an head entry based on bytenr. This returns the delayed ref
  182. * head if it was able to find one, or NULL if nothing was in that spot.
  183. * If return_bigger is given, the next bigger entry is returned if no exact
  184. * match is found.
  185. */
  186. static struct btrfs_delayed_ref_head *
  187. find_ref_head(struct rb_root *root, u64 bytenr,
  188. struct btrfs_delayed_ref_head **last, int return_bigger)
  189. {
  190. struct rb_node *n;
  191. struct btrfs_delayed_ref_head *entry;
  192. int cmp = 0;
  193. again:
  194. n = root->rb_node;
  195. entry = NULL;
  196. while (n) {
  197. entry = rb_entry(n, struct btrfs_delayed_ref_head, href_node);
  198. if (last)
  199. *last = entry;
  200. if (bytenr < entry->node.bytenr)
  201. cmp = -1;
  202. else if (bytenr > entry->node.bytenr)
  203. cmp = 1;
  204. else
  205. cmp = 0;
  206. if (cmp < 0)
  207. n = n->rb_left;
  208. else if (cmp > 0)
  209. n = n->rb_right;
  210. else
  211. return entry;
  212. }
  213. if (entry && return_bigger) {
  214. if (cmp > 0) {
  215. n = rb_next(&entry->href_node);
  216. if (!n)
  217. n = rb_first(root);
  218. entry = rb_entry(n, struct btrfs_delayed_ref_head,
  219. href_node);
  220. bytenr = entry->node.bytenr;
  221. return_bigger = 0;
  222. goto again;
  223. }
  224. return entry;
  225. }
  226. return NULL;
  227. }
  228. int btrfs_delayed_ref_lock(struct btrfs_trans_handle *trans,
  229. struct btrfs_delayed_ref_head *head)
  230. {
  231. struct btrfs_delayed_ref_root *delayed_refs;
  232. delayed_refs = &trans->transaction->delayed_refs;
  233. assert_spin_locked(&delayed_refs->lock);
  234. if (mutex_trylock(&head->mutex))
  235. return 0;
  236. atomic_inc(&head->node.refs);
  237. spin_unlock(&delayed_refs->lock);
  238. mutex_lock(&head->mutex);
  239. spin_lock(&delayed_refs->lock);
  240. if (!head->node.in_tree) {
  241. mutex_unlock(&head->mutex);
  242. btrfs_put_delayed_ref(&head->node);
  243. return -EAGAIN;
  244. }
  245. btrfs_put_delayed_ref(&head->node);
  246. return 0;
  247. }
  248. static inline void drop_delayed_ref(struct btrfs_trans_handle *trans,
  249. struct btrfs_delayed_ref_root *delayed_refs,
  250. struct btrfs_delayed_ref_node *ref)
  251. {
  252. rb_erase(&ref->rb_node, &delayed_refs->root);
  253. if (btrfs_delayed_ref_is_head(ref)) {
  254. struct btrfs_delayed_ref_head *head;
  255. head = btrfs_delayed_node_to_head(ref);
  256. rb_erase(&head->href_node, &delayed_refs->href_root);
  257. }
  258. ref->in_tree = 0;
  259. btrfs_put_delayed_ref(ref);
  260. delayed_refs->num_entries--;
  261. if (trans->delayed_ref_updates)
  262. trans->delayed_ref_updates--;
  263. }
  264. static int merge_ref(struct btrfs_trans_handle *trans,
  265. struct btrfs_delayed_ref_root *delayed_refs,
  266. struct btrfs_delayed_ref_node *ref, u64 seq)
  267. {
  268. struct rb_node *node;
  269. int merged = 0;
  270. int mod = 0;
  271. int done = 0;
  272. node = rb_prev(&ref->rb_node);
  273. while (node) {
  274. struct btrfs_delayed_ref_node *next;
  275. next = rb_entry(node, struct btrfs_delayed_ref_node, rb_node);
  276. node = rb_prev(node);
  277. if (next->bytenr != ref->bytenr)
  278. break;
  279. if (seq && next->seq >= seq)
  280. break;
  281. if (comp_entry(ref, next, 0))
  282. continue;
  283. if (ref->action == next->action) {
  284. mod = next->ref_mod;
  285. } else {
  286. if (ref->ref_mod < next->ref_mod) {
  287. struct btrfs_delayed_ref_node *tmp;
  288. tmp = ref;
  289. ref = next;
  290. next = tmp;
  291. done = 1;
  292. }
  293. mod = -next->ref_mod;
  294. }
  295. merged++;
  296. drop_delayed_ref(trans, delayed_refs, next);
  297. ref->ref_mod += mod;
  298. if (ref->ref_mod == 0) {
  299. drop_delayed_ref(trans, delayed_refs, ref);
  300. break;
  301. } else {
  302. /*
  303. * You can't have multiples of the same ref on a tree
  304. * block.
  305. */
  306. WARN_ON(ref->type == BTRFS_TREE_BLOCK_REF_KEY ||
  307. ref->type == BTRFS_SHARED_BLOCK_REF_KEY);
  308. }
  309. if (done)
  310. break;
  311. node = rb_prev(&ref->rb_node);
  312. }
  313. return merged;
  314. }
  315. void btrfs_merge_delayed_refs(struct btrfs_trans_handle *trans,
  316. struct btrfs_fs_info *fs_info,
  317. struct btrfs_delayed_ref_root *delayed_refs,
  318. struct btrfs_delayed_ref_head *head)
  319. {
  320. struct rb_node *node;
  321. u64 seq = 0;
  322. spin_lock(&fs_info->tree_mod_seq_lock);
  323. if (!list_empty(&fs_info->tree_mod_seq_list)) {
  324. struct seq_list *elem;
  325. elem = list_first_entry(&fs_info->tree_mod_seq_list,
  326. struct seq_list, list);
  327. seq = elem->seq;
  328. }
  329. spin_unlock(&fs_info->tree_mod_seq_lock);
  330. node = rb_prev(&head->node.rb_node);
  331. while (node) {
  332. struct btrfs_delayed_ref_node *ref;
  333. ref = rb_entry(node, struct btrfs_delayed_ref_node,
  334. rb_node);
  335. if (ref->bytenr != head->node.bytenr)
  336. break;
  337. /* We can't merge refs that are outside of our seq count */
  338. if (seq && ref->seq >= seq)
  339. break;
  340. if (merge_ref(trans, delayed_refs, ref, seq))
  341. node = rb_prev(&head->node.rb_node);
  342. else
  343. node = rb_prev(node);
  344. }
  345. }
  346. int btrfs_check_delayed_seq(struct btrfs_fs_info *fs_info,
  347. struct btrfs_delayed_ref_root *delayed_refs,
  348. u64 seq)
  349. {
  350. struct seq_list *elem;
  351. int ret = 0;
  352. spin_lock(&fs_info->tree_mod_seq_lock);
  353. if (!list_empty(&fs_info->tree_mod_seq_list)) {
  354. elem = list_first_entry(&fs_info->tree_mod_seq_list,
  355. struct seq_list, list);
  356. if (seq >= elem->seq) {
  357. pr_debug("holding back delayed_ref %#x.%x, lowest is %#x.%x (%p)\n",
  358. (u32)(seq >> 32), (u32)seq,
  359. (u32)(elem->seq >> 32), (u32)elem->seq,
  360. delayed_refs);
  361. ret = 1;
  362. }
  363. }
  364. spin_unlock(&fs_info->tree_mod_seq_lock);
  365. return ret;
  366. }
  367. int btrfs_find_ref_cluster(struct btrfs_trans_handle *trans,
  368. struct list_head *cluster, u64 start)
  369. {
  370. int count = 0;
  371. struct btrfs_delayed_ref_root *delayed_refs;
  372. struct rb_node *node;
  373. struct btrfs_delayed_ref_head *head = NULL;
  374. delayed_refs = &trans->transaction->delayed_refs;
  375. node = rb_first(&delayed_refs->href_root);
  376. if (start) {
  377. find_ref_head(&delayed_refs->href_root, start + 1, &head, 1);
  378. if (head)
  379. node = &head->href_node;
  380. }
  381. again:
  382. while (node && count < 32) {
  383. head = rb_entry(node, struct btrfs_delayed_ref_head, href_node);
  384. if (list_empty(&head->cluster)) {
  385. list_add_tail(&head->cluster, cluster);
  386. delayed_refs->run_delayed_start =
  387. head->node.bytenr;
  388. count++;
  389. WARN_ON(delayed_refs->num_heads_ready == 0);
  390. delayed_refs->num_heads_ready--;
  391. } else if (count) {
  392. /* the goal of the clustering is to find extents
  393. * that are likely to end up in the same extent
  394. * leaf on disk. So, we don't want them spread
  395. * all over the tree. Stop now if we've hit
  396. * a head that was already in use
  397. */
  398. break;
  399. }
  400. node = rb_next(node);
  401. }
  402. if (count) {
  403. return 0;
  404. } else if (start) {
  405. /*
  406. * we've gone to the end of the rbtree without finding any
  407. * clusters. start from the beginning and try again
  408. */
  409. start = 0;
  410. node = rb_first(&delayed_refs->href_root);
  411. goto again;
  412. }
  413. return 1;
  414. }
  415. void btrfs_release_ref_cluster(struct list_head *cluster)
  416. {
  417. struct list_head *pos, *q;
  418. list_for_each_safe(pos, q, cluster)
  419. list_del_init(pos);
  420. }
  421. /*
  422. * helper function to update an extent delayed ref in the
  423. * rbtree. existing and update must both have the same
  424. * bytenr and parent
  425. *
  426. * This may free existing if the update cancels out whatever
  427. * operation it was doing.
  428. */
  429. static noinline void
  430. update_existing_ref(struct btrfs_trans_handle *trans,
  431. struct btrfs_delayed_ref_root *delayed_refs,
  432. struct btrfs_delayed_ref_node *existing,
  433. struct btrfs_delayed_ref_node *update)
  434. {
  435. if (update->action != existing->action) {
  436. /*
  437. * this is effectively undoing either an add or a
  438. * drop. We decrement the ref_mod, and if it goes
  439. * down to zero we just delete the entry without
  440. * every changing the extent allocation tree.
  441. */
  442. existing->ref_mod--;
  443. if (existing->ref_mod == 0)
  444. drop_delayed_ref(trans, delayed_refs, existing);
  445. else
  446. WARN_ON(existing->type == BTRFS_TREE_BLOCK_REF_KEY ||
  447. existing->type == BTRFS_SHARED_BLOCK_REF_KEY);
  448. } else {
  449. WARN_ON(existing->type == BTRFS_TREE_BLOCK_REF_KEY ||
  450. existing->type == BTRFS_SHARED_BLOCK_REF_KEY);
  451. /*
  452. * the action on the existing ref matches
  453. * the action on the ref we're trying to add.
  454. * Bump the ref_mod by one so the backref that
  455. * is eventually added/removed has the correct
  456. * reference count
  457. */
  458. existing->ref_mod += update->ref_mod;
  459. }
  460. }
  461. /*
  462. * helper function to update the accounting in the head ref
  463. * existing and update must have the same bytenr
  464. */
  465. static noinline void
  466. update_existing_head_ref(struct btrfs_delayed_ref_node *existing,
  467. struct btrfs_delayed_ref_node *update)
  468. {
  469. struct btrfs_delayed_ref_head *existing_ref;
  470. struct btrfs_delayed_ref_head *ref;
  471. existing_ref = btrfs_delayed_node_to_head(existing);
  472. ref = btrfs_delayed_node_to_head(update);
  473. BUG_ON(existing_ref->is_data != ref->is_data);
  474. if (ref->must_insert_reserved) {
  475. /* if the extent was freed and then
  476. * reallocated before the delayed ref
  477. * entries were processed, we can end up
  478. * with an existing head ref without
  479. * the must_insert_reserved flag set.
  480. * Set it again here
  481. */
  482. existing_ref->must_insert_reserved = ref->must_insert_reserved;
  483. /*
  484. * update the num_bytes so we make sure the accounting
  485. * is done correctly
  486. */
  487. existing->num_bytes = update->num_bytes;
  488. }
  489. if (ref->extent_op) {
  490. if (!existing_ref->extent_op) {
  491. existing_ref->extent_op = ref->extent_op;
  492. } else {
  493. if (ref->extent_op->update_key) {
  494. memcpy(&existing_ref->extent_op->key,
  495. &ref->extent_op->key,
  496. sizeof(ref->extent_op->key));
  497. existing_ref->extent_op->update_key = 1;
  498. }
  499. if (ref->extent_op->update_flags) {
  500. existing_ref->extent_op->flags_to_set |=
  501. ref->extent_op->flags_to_set;
  502. existing_ref->extent_op->update_flags = 1;
  503. }
  504. btrfs_free_delayed_extent_op(ref->extent_op);
  505. }
  506. }
  507. /*
  508. * update the reference mod on the head to reflect this new operation
  509. */
  510. existing->ref_mod += update->ref_mod;
  511. }
  512. /*
  513. * helper function to actually insert a head node into the rbtree.
  514. * this does all the dirty work in terms of maintaining the correct
  515. * overall modification count.
  516. */
  517. static noinline void add_delayed_ref_head(struct btrfs_fs_info *fs_info,
  518. struct btrfs_trans_handle *trans,
  519. struct btrfs_delayed_ref_node *ref,
  520. u64 bytenr, u64 num_bytes,
  521. int action, int is_data)
  522. {
  523. struct btrfs_delayed_ref_node *existing;
  524. struct btrfs_delayed_ref_head *head_ref = NULL;
  525. struct btrfs_delayed_ref_root *delayed_refs;
  526. int count_mod = 1;
  527. int must_insert_reserved = 0;
  528. /*
  529. * the head node stores the sum of all the mods, so dropping a ref
  530. * should drop the sum in the head node by one.
  531. */
  532. if (action == BTRFS_UPDATE_DELAYED_HEAD)
  533. count_mod = 0;
  534. else if (action == BTRFS_DROP_DELAYED_REF)
  535. count_mod = -1;
  536. /*
  537. * BTRFS_ADD_DELAYED_EXTENT means that we need to update
  538. * the reserved accounting when the extent is finally added, or
  539. * if a later modification deletes the delayed ref without ever
  540. * inserting the extent into the extent allocation tree.
  541. * ref->must_insert_reserved is the flag used to record
  542. * that accounting mods are required.
  543. *
  544. * Once we record must_insert_reserved, switch the action to
  545. * BTRFS_ADD_DELAYED_REF because other special casing is not required.
  546. */
  547. if (action == BTRFS_ADD_DELAYED_EXTENT)
  548. must_insert_reserved = 1;
  549. else
  550. must_insert_reserved = 0;
  551. delayed_refs = &trans->transaction->delayed_refs;
  552. /* first set the basic ref node struct up */
  553. atomic_set(&ref->refs, 1);
  554. ref->bytenr = bytenr;
  555. ref->num_bytes = num_bytes;
  556. ref->ref_mod = count_mod;
  557. ref->type = 0;
  558. ref->action = 0;
  559. ref->is_head = 1;
  560. ref->in_tree = 1;
  561. ref->seq = 0;
  562. head_ref = btrfs_delayed_node_to_head(ref);
  563. head_ref->must_insert_reserved = must_insert_reserved;
  564. head_ref->is_data = is_data;
  565. INIT_LIST_HEAD(&head_ref->cluster);
  566. mutex_init(&head_ref->mutex);
  567. trace_add_delayed_ref_head(ref, head_ref, action);
  568. existing = tree_insert(&delayed_refs->root, &ref->rb_node);
  569. if (existing) {
  570. update_existing_head_ref(existing, ref);
  571. /*
  572. * we've updated the existing ref, free the newly
  573. * allocated ref
  574. */
  575. kmem_cache_free(btrfs_delayed_ref_head_cachep, head_ref);
  576. } else {
  577. htree_insert(&delayed_refs->href_root, &head_ref->href_node);
  578. delayed_refs->num_heads++;
  579. delayed_refs->num_heads_ready++;
  580. delayed_refs->num_entries++;
  581. trans->delayed_ref_updates++;
  582. }
  583. }
  584. /*
  585. * helper to insert a delayed tree ref into the rbtree.
  586. */
  587. static noinline void add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
  588. struct btrfs_trans_handle *trans,
  589. struct btrfs_delayed_ref_node *ref,
  590. u64 bytenr, u64 num_bytes, u64 parent,
  591. u64 ref_root, int level, int action,
  592. int for_cow)
  593. {
  594. struct btrfs_delayed_ref_node *existing;
  595. struct btrfs_delayed_tree_ref *full_ref;
  596. struct btrfs_delayed_ref_root *delayed_refs;
  597. u64 seq = 0;
  598. if (action == BTRFS_ADD_DELAYED_EXTENT)
  599. action = BTRFS_ADD_DELAYED_REF;
  600. delayed_refs = &trans->transaction->delayed_refs;
  601. /* first set the basic ref node struct up */
  602. atomic_set(&ref->refs, 1);
  603. ref->bytenr = bytenr;
  604. ref->num_bytes = num_bytes;
  605. ref->ref_mod = 1;
  606. ref->action = action;
  607. ref->is_head = 0;
  608. ref->in_tree = 1;
  609. if (need_ref_seq(for_cow, ref_root))
  610. seq = btrfs_get_tree_mod_seq(fs_info, &trans->delayed_ref_elem);
  611. ref->seq = seq;
  612. full_ref = btrfs_delayed_node_to_tree_ref(ref);
  613. full_ref->parent = parent;
  614. full_ref->root = ref_root;
  615. if (parent)
  616. ref->type = BTRFS_SHARED_BLOCK_REF_KEY;
  617. else
  618. ref->type = BTRFS_TREE_BLOCK_REF_KEY;
  619. full_ref->level = level;
  620. trace_add_delayed_tree_ref(ref, full_ref, action);
  621. existing = tree_insert(&delayed_refs->root, &ref->rb_node);
  622. if (existing) {
  623. update_existing_ref(trans, delayed_refs, existing, ref);
  624. /*
  625. * we've updated the existing ref, free the newly
  626. * allocated ref
  627. */
  628. kmem_cache_free(btrfs_delayed_tree_ref_cachep, full_ref);
  629. } else {
  630. delayed_refs->num_entries++;
  631. trans->delayed_ref_updates++;
  632. }
  633. }
  634. /*
  635. * helper to insert a delayed data ref into the rbtree.
  636. */
  637. static noinline void add_delayed_data_ref(struct btrfs_fs_info *fs_info,
  638. struct btrfs_trans_handle *trans,
  639. struct btrfs_delayed_ref_node *ref,
  640. u64 bytenr, u64 num_bytes, u64 parent,
  641. u64 ref_root, u64 owner, u64 offset,
  642. int action, int for_cow)
  643. {
  644. struct btrfs_delayed_ref_node *existing;
  645. struct btrfs_delayed_data_ref *full_ref;
  646. struct btrfs_delayed_ref_root *delayed_refs;
  647. u64 seq = 0;
  648. if (action == BTRFS_ADD_DELAYED_EXTENT)
  649. action = BTRFS_ADD_DELAYED_REF;
  650. delayed_refs = &trans->transaction->delayed_refs;
  651. /* first set the basic ref node struct up */
  652. atomic_set(&ref->refs, 1);
  653. ref->bytenr = bytenr;
  654. ref->num_bytes = num_bytes;
  655. ref->ref_mod = 1;
  656. ref->action = action;
  657. ref->is_head = 0;
  658. ref->in_tree = 1;
  659. if (need_ref_seq(for_cow, ref_root))
  660. seq = btrfs_get_tree_mod_seq(fs_info, &trans->delayed_ref_elem);
  661. ref->seq = seq;
  662. full_ref = btrfs_delayed_node_to_data_ref(ref);
  663. full_ref->parent = parent;
  664. full_ref->root = ref_root;
  665. if (parent)
  666. ref->type = BTRFS_SHARED_DATA_REF_KEY;
  667. else
  668. ref->type = BTRFS_EXTENT_DATA_REF_KEY;
  669. full_ref->objectid = owner;
  670. full_ref->offset = offset;
  671. trace_add_delayed_data_ref(ref, full_ref, action);
  672. existing = tree_insert(&delayed_refs->root, &ref->rb_node);
  673. if (existing) {
  674. update_existing_ref(trans, delayed_refs, existing, ref);
  675. /*
  676. * we've updated the existing ref, free the newly
  677. * allocated ref
  678. */
  679. kmem_cache_free(btrfs_delayed_data_ref_cachep, full_ref);
  680. } else {
  681. delayed_refs->num_entries++;
  682. trans->delayed_ref_updates++;
  683. }
  684. }
  685. /*
  686. * add a delayed tree ref. This does all of the accounting required
  687. * to make sure the delayed ref is eventually processed before this
  688. * transaction commits.
  689. */
  690. int btrfs_add_delayed_tree_ref(struct btrfs_fs_info *fs_info,
  691. struct btrfs_trans_handle *trans,
  692. u64 bytenr, u64 num_bytes, u64 parent,
  693. u64 ref_root, int level, int action,
  694. struct btrfs_delayed_extent_op *extent_op,
  695. int for_cow)
  696. {
  697. struct btrfs_delayed_tree_ref *ref;
  698. struct btrfs_delayed_ref_head *head_ref;
  699. struct btrfs_delayed_ref_root *delayed_refs;
  700. BUG_ON(extent_op && extent_op->is_data);
  701. ref = kmem_cache_alloc(btrfs_delayed_tree_ref_cachep, GFP_NOFS);
  702. if (!ref)
  703. return -ENOMEM;
  704. head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS);
  705. if (!head_ref) {
  706. kmem_cache_free(btrfs_delayed_tree_ref_cachep, ref);
  707. return -ENOMEM;
  708. }
  709. head_ref->extent_op = extent_op;
  710. delayed_refs = &trans->transaction->delayed_refs;
  711. spin_lock(&delayed_refs->lock);
  712. /*
  713. * insert both the head node and the new ref without dropping
  714. * the spin lock
  715. */
  716. add_delayed_ref_head(fs_info, trans, &head_ref->node, bytenr,
  717. num_bytes, action, 0);
  718. add_delayed_tree_ref(fs_info, trans, &ref->node, bytenr,
  719. num_bytes, parent, ref_root, level, action,
  720. for_cow);
  721. spin_unlock(&delayed_refs->lock);
  722. if (need_ref_seq(for_cow, ref_root))
  723. btrfs_qgroup_record_ref(trans, &ref->node, extent_op);
  724. return 0;
  725. }
  726. /*
  727. * add a delayed data ref. it's similar to btrfs_add_delayed_tree_ref.
  728. */
  729. int btrfs_add_delayed_data_ref(struct btrfs_fs_info *fs_info,
  730. struct btrfs_trans_handle *trans,
  731. u64 bytenr, u64 num_bytes,
  732. u64 parent, u64 ref_root,
  733. u64 owner, u64 offset, int action,
  734. struct btrfs_delayed_extent_op *extent_op,
  735. int for_cow)
  736. {
  737. struct btrfs_delayed_data_ref *ref;
  738. struct btrfs_delayed_ref_head *head_ref;
  739. struct btrfs_delayed_ref_root *delayed_refs;
  740. BUG_ON(extent_op && !extent_op->is_data);
  741. ref = kmem_cache_alloc(btrfs_delayed_data_ref_cachep, GFP_NOFS);
  742. if (!ref)
  743. return -ENOMEM;
  744. head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS);
  745. if (!head_ref) {
  746. kmem_cache_free(btrfs_delayed_data_ref_cachep, ref);
  747. return -ENOMEM;
  748. }
  749. head_ref->extent_op = extent_op;
  750. delayed_refs = &trans->transaction->delayed_refs;
  751. spin_lock(&delayed_refs->lock);
  752. /*
  753. * insert both the head node and the new ref without dropping
  754. * the spin lock
  755. */
  756. add_delayed_ref_head(fs_info, trans, &head_ref->node, bytenr,
  757. num_bytes, action, 1);
  758. add_delayed_data_ref(fs_info, trans, &ref->node, bytenr,
  759. num_bytes, parent, ref_root, owner, offset,
  760. action, for_cow);
  761. spin_unlock(&delayed_refs->lock);
  762. if (need_ref_seq(for_cow, ref_root))
  763. btrfs_qgroup_record_ref(trans, &ref->node, extent_op);
  764. return 0;
  765. }
  766. int btrfs_add_delayed_extent_op(struct btrfs_fs_info *fs_info,
  767. struct btrfs_trans_handle *trans,
  768. u64 bytenr, u64 num_bytes,
  769. struct btrfs_delayed_extent_op *extent_op)
  770. {
  771. struct btrfs_delayed_ref_head *head_ref;
  772. struct btrfs_delayed_ref_root *delayed_refs;
  773. head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS);
  774. if (!head_ref)
  775. return -ENOMEM;
  776. head_ref->extent_op = extent_op;
  777. delayed_refs = &trans->transaction->delayed_refs;
  778. spin_lock(&delayed_refs->lock);
  779. add_delayed_ref_head(fs_info, trans, &head_ref->node, bytenr,
  780. num_bytes, BTRFS_UPDATE_DELAYED_HEAD,
  781. extent_op->is_data);
  782. spin_unlock(&delayed_refs->lock);
  783. return 0;
  784. }
  785. /*
  786. * this does a simple search for the head node for a given extent.
  787. * It must be called with the delayed ref spinlock held, and it returns
  788. * the head node if any where found, or NULL if not.
  789. */
  790. struct btrfs_delayed_ref_head *
  791. btrfs_find_delayed_ref_head(struct btrfs_trans_handle *trans, u64 bytenr)
  792. {
  793. struct btrfs_delayed_ref_root *delayed_refs;
  794. delayed_refs = &trans->transaction->delayed_refs;
  795. return find_ref_head(&delayed_refs->href_root, bytenr, NULL, 0);
  796. }
  797. void btrfs_delayed_ref_exit(void)
  798. {
  799. if (btrfs_delayed_ref_head_cachep)
  800. kmem_cache_destroy(btrfs_delayed_ref_head_cachep);
  801. if (btrfs_delayed_tree_ref_cachep)
  802. kmem_cache_destroy(btrfs_delayed_tree_ref_cachep);
  803. if (btrfs_delayed_data_ref_cachep)
  804. kmem_cache_destroy(btrfs_delayed_data_ref_cachep);
  805. if (btrfs_delayed_extent_op_cachep)
  806. kmem_cache_destroy(btrfs_delayed_extent_op_cachep);
  807. }
  808. int btrfs_delayed_ref_init(void)
  809. {
  810. btrfs_delayed_ref_head_cachep = kmem_cache_create(
  811. "btrfs_delayed_ref_head",
  812. sizeof(struct btrfs_delayed_ref_head), 0,
  813. SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
  814. if (!btrfs_delayed_ref_head_cachep)
  815. goto fail;
  816. btrfs_delayed_tree_ref_cachep = kmem_cache_create(
  817. "btrfs_delayed_tree_ref",
  818. sizeof(struct btrfs_delayed_tree_ref), 0,
  819. SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
  820. if (!btrfs_delayed_tree_ref_cachep)
  821. goto fail;
  822. btrfs_delayed_data_ref_cachep = kmem_cache_create(
  823. "btrfs_delayed_data_ref",
  824. sizeof(struct btrfs_delayed_data_ref), 0,
  825. SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
  826. if (!btrfs_delayed_data_ref_cachep)
  827. goto fail;
  828. btrfs_delayed_extent_op_cachep = kmem_cache_create(
  829. "btrfs_delayed_extent_op",
  830. sizeof(struct btrfs_delayed_extent_op), 0,
  831. SLAB_RECLAIM_ACCOUNT | SLAB_MEM_SPREAD, NULL);
  832. if (!btrfs_delayed_extent_op_cachep)
  833. goto fail;
  834. return 0;
  835. fail:
  836. btrfs_delayed_ref_exit();
  837. return -ENOMEM;
  838. }