GNU Linux-libre 4.14.313-gnu1
[releases.git] / fs / btrfs / delayed-inode.c
1 /*
2  * Copyright (C) 2011 Fujitsu.  All rights reserved.
3  * Written by Miao Xie <miaox@cn.fujitsu.com>
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public
7  * License v2 as published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public
15  * License along with this program; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 021110-1307, USA.
18  */
19
20 #include <linux/slab.h>
21 #include <linux/sched/mm.h>
22 #include "delayed-inode.h"
23 #include "disk-io.h"
24 #include "transaction.h"
25 #include "ctree.h"
26
27 #define BTRFS_DELAYED_WRITEBACK         512
28 #define BTRFS_DELAYED_BACKGROUND        128
29 #define BTRFS_DELAYED_BATCH             16
30
31 static struct kmem_cache *delayed_node_cache;
32
33 int __init btrfs_delayed_inode_init(void)
34 {
35         delayed_node_cache = kmem_cache_create("btrfs_delayed_node",
36                                         sizeof(struct btrfs_delayed_node),
37                                         0,
38                                         SLAB_MEM_SPREAD,
39                                         NULL);
40         if (!delayed_node_cache)
41                 return -ENOMEM;
42         return 0;
43 }
44
45 void btrfs_delayed_inode_exit(void)
46 {
47         kmem_cache_destroy(delayed_node_cache);
48 }
49
50 static inline void btrfs_init_delayed_node(
51                                 struct btrfs_delayed_node *delayed_node,
52                                 struct btrfs_root *root, u64 inode_id)
53 {
54         delayed_node->root = root;
55         delayed_node->inode_id = inode_id;
56         refcount_set(&delayed_node->refs, 0);
57         delayed_node->ins_root = RB_ROOT;
58         delayed_node->del_root = RB_ROOT;
59         mutex_init(&delayed_node->mutex);
60         INIT_LIST_HEAD(&delayed_node->n_list);
61         INIT_LIST_HEAD(&delayed_node->p_list);
62 }
63
64 static inline int btrfs_is_continuous_delayed_item(
65                                         struct btrfs_delayed_item *item1,
66                                         struct btrfs_delayed_item *item2)
67 {
68         if (item1->key.type == BTRFS_DIR_INDEX_KEY &&
69             item1->key.objectid == item2->key.objectid &&
70             item1->key.type == item2->key.type &&
71             item1->key.offset + 1 == item2->key.offset)
72                 return 1;
73         return 0;
74 }
75
76 static struct btrfs_delayed_node *btrfs_get_delayed_node(
77                 struct btrfs_inode *btrfs_inode)
78 {
79         struct btrfs_root *root = btrfs_inode->root;
80         u64 ino = btrfs_ino(btrfs_inode);
81         struct btrfs_delayed_node *node;
82
83         node = READ_ONCE(btrfs_inode->delayed_node);
84         if (node) {
85                 refcount_inc(&node->refs);
86                 return node;
87         }
88
89         spin_lock(&root->inode_lock);
90         node = radix_tree_lookup(&root->delayed_nodes_tree, ino);
91
92         if (node) {
93                 if (btrfs_inode->delayed_node) {
94                         refcount_inc(&node->refs);      /* can be accessed */
95                         BUG_ON(btrfs_inode->delayed_node != node);
96                         spin_unlock(&root->inode_lock);
97                         return node;
98                 }
99
100                 /*
101                  * It's possible that we're racing into the middle of removing
102                  * this node from the radix tree.  In this case, the refcount
103                  * was zero and it should never go back to one.  Just return
104                  * NULL like it was never in the radix at all; our release
105                  * function is in the process of removing it.
106                  *
107                  * Some implementations of refcount_inc refuse to bump the
108                  * refcount once it has hit zero.  If we don't do this dance
109                  * here, refcount_inc() may decide to just WARN_ONCE() instead
110                  * of actually bumping the refcount.
111                  *
112                  * If this node is properly in the radix, we want to bump the
113                  * refcount twice, once for the inode and once for this get
114                  * operation.
115                  */
116                 if (refcount_inc_not_zero(&node->refs)) {
117                         refcount_inc(&node->refs);
118                         btrfs_inode->delayed_node = node;
119                 } else {
120                         node = NULL;
121                 }
122
123                 spin_unlock(&root->inode_lock);
124                 return node;
125         }
126         spin_unlock(&root->inode_lock);
127
128         return NULL;
129 }
130
131 /* Will return either the node or PTR_ERR(-ENOMEM) */
132 static struct btrfs_delayed_node *btrfs_get_or_create_delayed_node(
133                 struct btrfs_inode *btrfs_inode)
134 {
135         struct btrfs_delayed_node *node;
136         struct btrfs_root *root = btrfs_inode->root;
137         u64 ino = btrfs_ino(btrfs_inode);
138         int ret;
139
140 again:
141         node = btrfs_get_delayed_node(btrfs_inode);
142         if (node)
143                 return node;
144
145         node = kmem_cache_zalloc(delayed_node_cache, GFP_NOFS);
146         if (!node)
147                 return ERR_PTR(-ENOMEM);
148         btrfs_init_delayed_node(node, root, ino);
149
150         /* cached in the btrfs inode and can be accessed */
151         refcount_set(&node->refs, 2);
152
153         ret = radix_tree_preload(GFP_NOFS);
154         if (ret) {
155                 kmem_cache_free(delayed_node_cache, node);
156                 return ERR_PTR(ret);
157         }
158
159         spin_lock(&root->inode_lock);
160         ret = radix_tree_insert(&root->delayed_nodes_tree, ino, node);
161         if (ret == -EEXIST) {
162                 spin_unlock(&root->inode_lock);
163                 kmem_cache_free(delayed_node_cache, node);
164                 radix_tree_preload_end();
165                 goto again;
166         }
167         btrfs_inode->delayed_node = node;
168         spin_unlock(&root->inode_lock);
169         radix_tree_preload_end();
170
171         return node;
172 }
173
174 /*
175  * Call it when holding delayed_node->mutex
176  *
177  * If mod = 1, add this node into the prepared list.
178  */
179 static void btrfs_queue_delayed_node(struct btrfs_delayed_root *root,
180                                      struct btrfs_delayed_node *node,
181                                      int mod)
182 {
183         spin_lock(&root->lock);
184         if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) {
185                 if (!list_empty(&node->p_list))
186                         list_move_tail(&node->p_list, &root->prepare_list);
187                 else if (mod)
188                         list_add_tail(&node->p_list, &root->prepare_list);
189         } else {
190                 list_add_tail(&node->n_list, &root->node_list);
191                 list_add_tail(&node->p_list, &root->prepare_list);
192                 refcount_inc(&node->refs);      /* inserted into list */
193                 root->nodes++;
194                 set_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags);
195         }
196         spin_unlock(&root->lock);
197 }
198
199 /* Call it when holding delayed_node->mutex */
200 static void btrfs_dequeue_delayed_node(struct btrfs_delayed_root *root,
201                                        struct btrfs_delayed_node *node)
202 {
203         spin_lock(&root->lock);
204         if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) {
205                 root->nodes--;
206                 refcount_dec(&node->refs);      /* not in the list */
207                 list_del_init(&node->n_list);
208                 if (!list_empty(&node->p_list))
209                         list_del_init(&node->p_list);
210                 clear_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags);
211         }
212         spin_unlock(&root->lock);
213 }
214
215 static struct btrfs_delayed_node *btrfs_first_delayed_node(
216                         struct btrfs_delayed_root *delayed_root)
217 {
218         struct list_head *p;
219         struct btrfs_delayed_node *node = NULL;
220
221         spin_lock(&delayed_root->lock);
222         if (list_empty(&delayed_root->node_list))
223                 goto out;
224
225         p = delayed_root->node_list.next;
226         node = list_entry(p, struct btrfs_delayed_node, n_list);
227         refcount_inc(&node->refs);
228 out:
229         spin_unlock(&delayed_root->lock);
230
231         return node;
232 }
233
234 static struct btrfs_delayed_node *btrfs_next_delayed_node(
235                                                 struct btrfs_delayed_node *node)
236 {
237         struct btrfs_delayed_root *delayed_root;
238         struct list_head *p;
239         struct btrfs_delayed_node *next = NULL;
240
241         delayed_root = node->root->fs_info->delayed_root;
242         spin_lock(&delayed_root->lock);
243         if (!test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) {
244                 /* not in the list */
245                 if (list_empty(&delayed_root->node_list))
246                         goto out;
247                 p = delayed_root->node_list.next;
248         } else if (list_is_last(&node->n_list, &delayed_root->node_list))
249                 goto out;
250         else
251                 p = node->n_list.next;
252
253         next = list_entry(p, struct btrfs_delayed_node, n_list);
254         refcount_inc(&next->refs);
255 out:
256         spin_unlock(&delayed_root->lock);
257
258         return next;
259 }
260
261 static void __btrfs_release_delayed_node(
262                                 struct btrfs_delayed_node *delayed_node,
263                                 int mod)
264 {
265         struct btrfs_delayed_root *delayed_root;
266
267         if (!delayed_node)
268                 return;
269
270         delayed_root = delayed_node->root->fs_info->delayed_root;
271
272         mutex_lock(&delayed_node->mutex);
273         if (delayed_node->count)
274                 btrfs_queue_delayed_node(delayed_root, delayed_node, mod);
275         else
276                 btrfs_dequeue_delayed_node(delayed_root, delayed_node);
277         mutex_unlock(&delayed_node->mutex);
278
279         if (refcount_dec_and_test(&delayed_node->refs)) {
280                 struct btrfs_root *root = delayed_node->root;
281
282                 spin_lock(&root->inode_lock);
283                 /*
284                  * Once our refcount goes to zero, nobody is allowed to bump it
285                  * back up.  We can delete it now.
286                  */
287                 ASSERT(refcount_read(&delayed_node->refs) == 0);
288                 radix_tree_delete(&root->delayed_nodes_tree,
289                                   delayed_node->inode_id);
290                 spin_unlock(&root->inode_lock);
291                 kmem_cache_free(delayed_node_cache, delayed_node);
292         }
293 }
294
295 static inline void btrfs_release_delayed_node(struct btrfs_delayed_node *node)
296 {
297         __btrfs_release_delayed_node(node, 0);
298 }
299
300 static struct btrfs_delayed_node *btrfs_first_prepared_delayed_node(
301                                         struct btrfs_delayed_root *delayed_root)
302 {
303         struct list_head *p;
304         struct btrfs_delayed_node *node = NULL;
305
306         spin_lock(&delayed_root->lock);
307         if (list_empty(&delayed_root->prepare_list))
308                 goto out;
309
310         p = delayed_root->prepare_list.next;
311         list_del_init(p);
312         node = list_entry(p, struct btrfs_delayed_node, p_list);
313         refcount_inc(&node->refs);
314 out:
315         spin_unlock(&delayed_root->lock);
316
317         return node;
318 }
319
320 static inline void btrfs_release_prepared_delayed_node(
321                                         struct btrfs_delayed_node *node)
322 {
323         __btrfs_release_delayed_node(node, 1);
324 }
325
326 static struct btrfs_delayed_item *btrfs_alloc_delayed_item(u32 data_len)
327 {
328         struct btrfs_delayed_item *item;
329         item = kmalloc(sizeof(*item) + data_len, GFP_NOFS);
330         if (item) {
331                 item->data_len = data_len;
332                 item->ins_or_del = 0;
333                 item->bytes_reserved = 0;
334                 item->delayed_node = NULL;
335                 refcount_set(&item->refs, 1);
336         }
337         return item;
338 }
339
340 /*
341  * __btrfs_lookup_delayed_item - look up the delayed item by key
342  * @delayed_node: pointer to the delayed node
343  * @key:          the key to look up
344  * @prev:         used to store the prev item if the right item isn't found
345  * @next:         used to store the next item if the right item isn't found
346  *
347  * Note: if we don't find the right item, we will return the prev item and
348  * the next item.
349  */
350 static struct btrfs_delayed_item *__btrfs_lookup_delayed_item(
351                                 struct rb_root *root,
352                                 struct btrfs_key *key,
353                                 struct btrfs_delayed_item **prev,
354                                 struct btrfs_delayed_item **next)
355 {
356         struct rb_node *node, *prev_node = NULL;
357         struct btrfs_delayed_item *delayed_item = NULL;
358         int ret = 0;
359
360         node = root->rb_node;
361
362         while (node) {
363                 delayed_item = rb_entry(node, struct btrfs_delayed_item,
364                                         rb_node);
365                 prev_node = node;
366                 ret = btrfs_comp_cpu_keys(&delayed_item->key, key);
367                 if (ret < 0)
368                         node = node->rb_right;
369                 else if (ret > 0)
370                         node = node->rb_left;
371                 else
372                         return delayed_item;
373         }
374
375         if (prev) {
376                 if (!prev_node)
377                         *prev = NULL;
378                 else if (ret < 0)
379                         *prev = delayed_item;
380                 else if ((node = rb_prev(prev_node)) != NULL) {
381                         *prev = rb_entry(node, struct btrfs_delayed_item,
382                                          rb_node);
383                 } else
384                         *prev = NULL;
385         }
386
387         if (next) {
388                 if (!prev_node)
389                         *next = NULL;
390                 else if (ret > 0)
391                         *next = delayed_item;
392                 else if ((node = rb_next(prev_node)) != NULL) {
393                         *next = rb_entry(node, struct btrfs_delayed_item,
394                                          rb_node);
395                 } else
396                         *next = NULL;
397         }
398         return NULL;
399 }
400
401 static struct btrfs_delayed_item *__btrfs_lookup_delayed_insertion_item(
402                                         struct btrfs_delayed_node *delayed_node,
403                                         struct btrfs_key *key)
404 {
405         return __btrfs_lookup_delayed_item(&delayed_node->ins_root, key,
406                                            NULL, NULL);
407 }
408
409 static int __btrfs_add_delayed_item(struct btrfs_delayed_node *delayed_node,
410                                     struct btrfs_delayed_item *ins,
411                                     int action)
412 {
413         struct rb_node **p, *node;
414         struct rb_node *parent_node = NULL;
415         struct rb_root *root;
416         struct btrfs_delayed_item *item;
417         int cmp;
418
419         if (action == BTRFS_DELAYED_INSERTION_ITEM)
420                 root = &delayed_node->ins_root;
421         else if (action == BTRFS_DELAYED_DELETION_ITEM)
422                 root = &delayed_node->del_root;
423         else
424                 BUG();
425         p = &root->rb_node;
426         node = &ins->rb_node;
427
428         while (*p) {
429                 parent_node = *p;
430                 item = rb_entry(parent_node, struct btrfs_delayed_item,
431                                  rb_node);
432
433                 cmp = btrfs_comp_cpu_keys(&item->key, &ins->key);
434                 if (cmp < 0)
435                         p = &(*p)->rb_right;
436                 else if (cmp > 0)
437                         p = &(*p)->rb_left;
438                 else
439                         return -EEXIST;
440         }
441
442         rb_link_node(node, parent_node, p);
443         rb_insert_color(node, root);
444         ins->delayed_node = delayed_node;
445         ins->ins_or_del = action;
446
447         if (ins->key.type == BTRFS_DIR_INDEX_KEY &&
448             action == BTRFS_DELAYED_INSERTION_ITEM &&
449             ins->key.offset >= delayed_node->index_cnt)
450                         delayed_node->index_cnt = ins->key.offset + 1;
451
452         delayed_node->count++;
453         atomic_inc(&delayed_node->root->fs_info->delayed_root->items);
454         return 0;
455 }
456
457 static int __btrfs_add_delayed_insertion_item(struct btrfs_delayed_node *node,
458                                               struct btrfs_delayed_item *item)
459 {
460         return __btrfs_add_delayed_item(node, item,
461                                         BTRFS_DELAYED_INSERTION_ITEM);
462 }
463
464 static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node,
465                                              struct btrfs_delayed_item *item)
466 {
467         return __btrfs_add_delayed_item(node, item,
468                                         BTRFS_DELAYED_DELETION_ITEM);
469 }
470
471 static void finish_one_item(struct btrfs_delayed_root *delayed_root)
472 {
473         int seq = atomic_inc_return(&delayed_root->items_seq);
474
475         /*
476          * atomic_dec_return implies a barrier for waitqueue_active
477          */
478         if ((atomic_dec_return(&delayed_root->items) <
479             BTRFS_DELAYED_BACKGROUND || seq % BTRFS_DELAYED_BATCH == 0) &&
480             waitqueue_active(&delayed_root->wait))
481                 wake_up(&delayed_root->wait);
482 }
483
484 static void __btrfs_remove_delayed_item(struct btrfs_delayed_item *delayed_item)
485 {
486         struct rb_root *root;
487         struct btrfs_delayed_root *delayed_root;
488
489         delayed_root = delayed_item->delayed_node->root->fs_info->delayed_root;
490
491         BUG_ON(!delayed_root);
492         BUG_ON(delayed_item->ins_or_del != BTRFS_DELAYED_DELETION_ITEM &&
493                delayed_item->ins_or_del != BTRFS_DELAYED_INSERTION_ITEM);
494
495         if (delayed_item->ins_or_del == BTRFS_DELAYED_INSERTION_ITEM)
496                 root = &delayed_item->delayed_node->ins_root;
497         else
498                 root = &delayed_item->delayed_node->del_root;
499
500         rb_erase(&delayed_item->rb_node, root);
501         delayed_item->delayed_node->count--;
502
503         finish_one_item(delayed_root);
504 }
505
506 static void btrfs_release_delayed_item(struct btrfs_delayed_item *item)
507 {
508         if (item) {
509                 __btrfs_remove_delayed_item(item);
510                 if (refcount_dec_and_test(&item->refs))
511                         kfree(item);
512         }
513 }
514
515 static struct btrfs_delayed_item *__btrfs_first_delayed_insertion_item(
516                                         struct btrfs_delayed_node *delayed_node)
517 {
518         struct rb_node *p;
519         struct btrfs_delayed_item *item = NULL;
520
521         p = rb_first(&delayed_node->ins_root);
522         if (p)
523                 item = rb_entry(p, struct btrfs_delayed_item, rb_node);
524
525         return item;
526 }
527
528 static struct btrfs_delayed_item *__btrfs_first_delayed_deletion_item(
529                                         struct btrfs_delayed_node *delayed_node)
530 {
531         struct rb_node *p;
532         struct btrfs_delayed_item *item = NULL;
533
534         p = rb_first(&delayed_node->del_root);
535         if (p)
536                 item = rb_entry(p, struct btrfs_delayed_item, rb_node);
537
538         return item;
539 }
540
541 static struct btrfs_delayed_item *__btrfs_next_delayed_item(
542                                                 struct btrfs_delayed_item *item)
543 {
544         struct rb_node *p;
545         struct btrfs_delayed_item *next = NULL;
546
547         p = rb_next(&item->rb_node);
548         if (p)
549                 next = rb_entry(p, struct btrfs_delayed_item, rb_node);
550
551         return next;
552 }
553
554 static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans,
555                                                struct btrfs_fs_info *fs_info,
556                                                struct btrfs_delayed_item *item)
557 {
558         struct btrfs_block_rsv *src_rsv;
559         struct btrfs_block_rsv *dst_rsv;
560         u64 num_bytes;
561         int ret;
562
563         if (!trans->bytes_reserved)
564                 return 0;
565
566         src_rsv = trans->block_rsv;
567         dst_rsv = &fs_info->delayed_block_rsv;
568
569         num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
570         ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
571         if (!ret) {
572                 trace_btrfs_space_reservation(fs_info, "delayed_item",
573                                               item->key.objectid,
574                                               num_bytes, 1);
575                 item->bytes_reserved = num_bytes;
576         }
577
578         return ret;
579 }
580
581 static void btrfs_delayed_item_release_metadata(struct btrfs_fs_info *fs_info,
582                                                 struct btrfs_delayed_item *item)
583 {
584         struct btrfs_block_rsv *rsv;
585
586         if (!item->bytes_reserved)
587                 return;
588
589         rsv = &fs_info->delayed_block_rsv;
590         trace_btrfs_space_reservation(fs_info, "delayed_item",
591                                       item->key.objectid, item->bytes_reserved,
592                                       0);
593         btrfs_block_rsv_release(fs_info, rsv,
594                                 item->bytes_reserved);
595 }
596
597 static int btrfs_delayed_inode_reserve_metadata(
598                                         struct btrfs_trans_handle *trans,
599                                         struct btrfs_root *root,
600                                         struct btrfs_inode *inode,
601                                         struct btrfs_delayed_node *node)
602 {
603         struct btrfs_fs_info *fs_info = root->fs_info;
604         struct btrfs_block_rsv *src_rsv;
605         struct btrfs_block_rsv *dst_rsv;
606         u64 num_bytes;
607         int ret;
608         bool release = false;
609
610         src_rsv = trans->block_rsv;
611         dst_rsv = &fs_info->delayed_block_rsv;
612
613         num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
614
615         /*
616          * If our block_rsv is the delalloc block reserve then check and see if
617          * we have our extra reservation for updating the inode.  If not fall
618          * through and try to reserve space quickly.
619          *
620          * We used to try and steal from the delalloc block rsv or the global
621          * reserve, but we'd steal a full reservation, which isn't kind.  We are
622          * here through delalloc which means we've likely just cowed down close
623          * to the leaf that contains the inode, so we would steal less just
624          * doing the fallback inode update, so if we do end up having to steal
625          * from the global block rsv we hopefully only steal one or two blocks
626          * worth which is less likely to hurt us.
627          */
628         if (src_rsv && src_rsv->type == BTRFS_BLOCK_RSV_DELALLOC) {
629                 spin_lock(&inode->lock);
630                 if (test_and_clear_bit(BTRFS_INODE_DELALLOC_META_RESERVED,
631                                        &inode->runtime_flags))
632                         release = true;
633                 else
634                         src_rsv = NULL;
635                 spin_unlock(&inode->lock);
636         }
637
638         /*
639          * btrfs_dirty_inode will update the inode under btrfs_join_transaction
640          * which doesn't reserve space for speed.  This is a problem since we
641          * still need to reserve space for this update, so try to reserve the
642          * space.
643          *
644          * Now if src_rsv == delalloc_block_rsv we'll let it just steal since
645          * we're accounted for.
646          */
647         if (!src_rsv || (!trans->bytes_reserved &&
648                          src_rsv->type != BTRFS_BLOCK_RSV_DELALLOC)) {
649                 ret = btrfs_block_rsv_add(root, dst_rsv, num_bytes,
650                                           BTRFS_RESERVE_NO_FLUSH);
651                 /*
652                  * Since we're under a transaction reserve_metadata_bytes could
653                  * try to commit the transaction which will make it return
654                  * EAGAIN to make us stop the transaction we have, so return
655                  * ENOSPC instead so that btrfs_dirty_inode knows what to do.
656                  */
657                 if (ret == -EAGAIN)
658                         ret = -ENOSPC;
659                 if (!ret) {
660                         node->bytes_reserved = num_bytes;
661                         trace_btrfs_space_reservation(fs_info,
662                                                       "delayed_inode",
663                                                       btrfs_ino(inode),
664                                                       num_bytes, 1);
665                 }
666                 return ret;
667         }
668
669         ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
670
671         /*
672          * Migrate only takes a reservation, it doesn't touch the size of the
673          * block_rsv.  This is to simplify people who don't normally have things
674          * migrated from their block rsv.  If they go to release their
675          * reservation, that will decrease the size as well, so if migrate
676          * reduced size we'd end up with a negative size.  But for the
677          * delalloc_meta_reserved stuff we will only know to drop 1 reservation,
678          * but we could in fact do this reserve/migrate dance several times
679          * between the time we did the original reservation and we'd clean it
680          * up.  So to take care of this, release the space for the meta
681          * reservation here.  I think it may be time for a documentation page on
682          * how block rsvs. work.
683          */
684         if (!ret) {
685                 trace_btrfs_space_reservation(fs_info, "delayed_inode",
686                                               btrfs_ino(inode), num_bytes, 1);
687                 node->bytes_reserved = num_bytes;
688         }
689
690         if (release) {
691                 trace_btrfs_space_reservation(fs_info, "delalloc",
692                                               btrfs_ino(inode), num_bytes, 0);
693                 btrfs_block_rsv_release(fs_info, src_rsv, num_bytes);
694         }
695
696         return ret;
697 }
698
699 static void btrfs_delayed_inode_release_metadata(struct btrfs_fs_info *fs_info,
700                                                 struct btrfs_delayed_node *node)
701 {
702         struct btrfs_block_rsv *rsv;
703
704         if (!node->bytes_reserved)
705                 return;
706
707         rsv = &fs_info->delayed_block_rsv;
708         trace_btrfs_space_reservation(fs_info, "delayed_inode",
709                                       node->inode_id, node->bytes_reserved, 0);
710         btrfs_block_rsv_release(fs_info, rsv,
711                                 node->bytes_reserved);
712         node->bytes_reserved = 0;
713 }
714
715 /*
716  * This helper will insert some continuous items into the same leaf according
717  * to the free space of the leaf.
718  */
719 static int btrfs_batch_insert_items(struct btrfs_root *root,
720                                     struct btrfs_path *path,
721                                     struct btrfs_delayed_item *item)
722 {
723         struct btrfs_fs_info *fs_info = root->fs_info;
724         struct btrfs_delayed_item *curr, *next;
725         int free_space;
726         int total_data_size = 0, total_size = 0;
727         struct extent_buffer *leaf;
728         char *data_ptr;
729         struct btrfs_key *keys;
730         u32 *data_size;
731         struct list_head head;
732         int slot;
733         int nitems;
734         int i;
735         int ret = 0;
736
737         BUG_ON(!path->nodes[0]);
738
739         leaf = path->nodes[0];
740         free_space = btrfs_leaf_free_space(fs_info, leaf);
741         INIT_LIST_HEAD(&head);
742
743         next = item;
744         nitems = 0;
745
746         /*
747          * count the number of the continuous items that we can insert in batch
748          */
749         while (total_size + next->data_len + sizeof(struct btrfs_item) <=
750                free_space) {
751                 total_data_size += next->data_len;
752                 total_size += next->data_len + sizeof(struct btrfs_item);
753                 list_add_tail(&next->tree_list, &head);
754                 nitems++;
755
756                 curr = next;
757                 next = __btrfs_next_delayed_item(curr);
758                 if (!next)
759                         break;
760
761                 if (!btrfs_is_continuous_delayed_item(curr, next))
762                         break;
763         }
764
765         if (!nitems) {
766                 ret = 0;
767                 goto out;
768         }
769
770         /*
771          * we need allocate some memory space, but it might cause the task
772          * to sleep, so we set all locked nodes in the path to blocking locks
773          * first.
774          */
775         btrfs_set_path_blocking(path);
776
777         keys = kmalloc_array(nitems, sizeof(struct btrfs_key), GFP_NOFS);
778         if (!keys) {
779                 ret = -ENOMEM;
780                 goto out;
781         }
782
783         data_size = kmalloc_array(nitems, sizeof(u32), GFP_NOFS);
784         if (!data_size) {
785                 ret = -ENOMEM;
786                 goto error;
787         }
788
789         /* get keys of all the delayed items */
790         i = 0;
791         list_for_each_entry(next, &head, tree_list) {
792                 keys[i] = next->key;
793                 data_size[i] = next->data_len;
794                 i++;
795         }
796
797         /* reset all the locked nodes in the patch to spinning locks. */
798         btrfs_clear_path_blocking(path, NULL, 0);
799
800         /* insert the keys of the items */
801         setup_items_for_insert(root, path, keys, data_size,
802                                total_data_size, total_size, nitems);
803
804         /* insert the dir index items */
805         slot = path->slots[0];
806         list_for_each_entry_safe(curr, next, &head, tree_list) {
807                 data_ptr = btrfs_item_ptr(leaf, slot, char);
808                 write_extent_buffer(leaf, &curr->data,
809                                     (unsigned long)data_ptr,
810                                     curr->data_len);
811                 slot++;
812
813                 btrfs_delayed_item_release_metadata(fs_info, curr);
814
815                 list_del(&curr->tree_list);
816                 btrfs_release_delayed_item(curr);
817         }
818
819 error:
820         kfree(data_size);
821         kfree(keys);
822 out:
823         return ret;
824 }
825
826 /*
827  * This helper can just do simple insertion that needn't extend item for new
828  * data, such as directory name index insertion, inode insertion.
829  */
830 static int btrfs_insert_delayed_item(struct btrfs_trans_handle *trans,
831                                      struct btrfs_root *root,
832                                      struct btrfs_path *path,
833                                      struct btrfs_delayed_item *delayed_item)
834 {
835         struct btrfs_fs_info *fs_info = root->fs_info;
836         struct extent_buffer *leaf;
837         unsigned int nofs_flag;
838         char *ptr;
839         int ret;
840
841         nofs_flag = memalloc_nofs_save();
842         ret = btrfs_insert_empty_item(trans, root, path, &delayed_item->key,
843                                       delayed_item->data_len);
844         memalloc_nofs_restore(nofs_flag);
845         if (ret < 0 && ret != -EEXIST)
846                 return ret;
847
848         leaf = path->nodes[0];
849
850         ptr = btrfs_item_ptr(leaf, path->slots[0], char);
851
852         write_extent_buffer(leaf, delayed_item->data, (unsigned long)ptr,
853                             delayed_item->data_len);
854         btrfs_mark_buffer_dirty(leaf);
855
856         btrfs_delayed_item_release_metadata(fs_info, delayed_item);
857         return 0;
858 }
859
860 /*
861  * we insert an item first, then if there are some continuous items, we try
862  * to insert those items into the same leaf.
863  */
864 static int btrfs_insert_delayed_items(struct btrfs_trans_handle *trans,
865                                       struct btrfs_path *path,
866                                       struct btrfs_root *root,
867                                       struct btrfs_delayed_node *node)
868 {
869         struct btrfs_delayed_item *curr, *prev;
870         int ret = 0;
871
872 do_again:
873         mutex_lock(&node->mutex);
874         curr = __btrfs_first_delayed_insertion_item(node);
875         if (!curr)
876                 goto insert_end;
877
878         ret = btrfs_insert_delayed_item(trans, root, path, curr);
879         if (ret < 0) {
880                 btrfs_release_path(path);
881                 goto insert_end;
882         }
883
884         prev = curr;
885         curr = __btrfs_next_delayed_item(prev);
886         if (curr && btrfs_is_continuous_delayed_item(prev, curr)) {
887                 /* insert the continuous items into the same leaf */
888                 path->slots[0]++;
889                 btrfs_batch_insert_items(root, path, curr);
890         }
891         btrfs_release_delayed_item(prev);
892         btrfs_mark_buffer_dirty(path->nodes[0]);
893
894         btrfs_release_path(path);
895         mutex_unlock(&node->mutex);
896         goto do_again;
897
898 insert_end:
899         mutex_unlock(&node->mutex);
900         return ret;
901 }
902
903 static int btrfs_batch_delete_items(struct btrfs_trans_handle *trans,
904                                     struct btrfs_root *root,
905                                     struct btrfs_path *path,
906                                     struct btrfs_delayed_item *item)
907 {
908         struct btrfs_fs_info *fs_info = root->fs_info;
909         struct btrfs_delayed_item *curr, *next;
910         struct extent_buffer *leaf;
911         struct btrfs_key key;
912         struct list_head head;
913         int nitems, i, last_item;
914         int ret = 0;
915
916         BUG_ON(!path->nodes[0]);
917
918         leaf = path->nodes[0];
919
920         i = path->slots[0];
921         last_item = btrfs_header_nritems(leaf) - 1;
922         if (i > last_item)
923                 return -ENOENT; /* FIXME: Is errno suitable? */
924
925         next = item;
926         INIT_LIST_HEAD(&head);
927         btrfs_item_key_to_cpu(leaf, &key, i);
928         nitems = 0;
929         /*
930          * count the number of the dir index items that we can delete in batch
931          */
932         while (btrfs_comp_cpu_keys(&next->key, &key) == 0) {
933                 list_add_tail(&next->tree_list, &head);
934                 nitems++;
935
936                 curr = next;
937                 next = __btrfs_next_delayed_item(curr);
938                 if (!next)
939                         break;
940
941                 if (!btrfs_is_continuous_delayed_item(curr, next))
942                         break;
943
944                 i++;
945                 if (i > last_item)
946                         break;
947                 btrfs_item_key_to_cpu(leaf, &key, i);
948         }
949
950         if (!nitems)
951                 return 0;
952
953         ret = btrfs_del_items(trans, root, path, path->slots[0], nitems);
954         if (ret)
955                 goto out;
956
957         list_for_each_entry_safe(curr, next, &head, tree_list) {
958                 btrfs_delayed_item_release_metadata(fs_info, curr);
959                 list_del(&curr->tree_list);
960                 btrfs_release_delayed_item(curr);
961         }
962
963 out:
964         return ret;
965 }
966
967 static int btrfs_delete_delayed_items(struct btrfs_trans_handle *trans,
968                                       struct btrfs_path *path,
969                                       struct btrfs_root *root,
970                                       struct btrfs_delayed_node *node)
971 {
972         struct btrfs_delayed_item *curr, *prev;
973         unsigned int nofs_flag;
974         int ret = 0;
975
976 do_again:
977         mutex_lock(&node->mutex);
978         curr = __btrfs_first_delayed_deletion_item(node);
979         if (!curr)
980                 goto delete_fail;
981
982         nofs_flag = memalloc_nofs_save();
983         ret = btrfs_search_slot(trans, root, &curr->key, path, -1, 1);
984         memalloc_nofs_restore(nofs_flag);
985         if (ret < 0)
986                 goto delete_fail;
987         else if (ret > 0) {
988                 /*
989                  * can't find the item which the node points to, so this node
990                  * is invalid, just drop it.
991                  */
992                 prev = curr;
993                 curr = __btrfs_next_delayed_item(prev);
994                 btrfs_release_delayed_item(prev);
995                 ret = 0;
996                 btrfs_release_path(path);
997                 if (curr) {
998                         mutex_unlock(&node->mutex);
999                         goto do_again;
1000                 } else
1001                         goto delete_fail;
1002         }
1003
1004         btrfs_batch_delete_items(trans, root, path, curr);
1005         btrfs_release_path(path);
1006         mutex_unlock(&node->mutex);
1007         goto do_again;
1008
1009 delete_fail:
1010         btrfs_release_path(path);
1011         mutex_unlock(&node->mutex);
1012         return ret;
1013 }
1014
1015 static void btrfs_release_delayed_inode(struct btrfs_delayed_node *delayed_node)
1016 {
1017         struct btrfs_delayed_root *delayed_root;
1018
1019         if (delayed_node &&
1020             test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) {
1021                 BUG_ON(!delayed_node->root);
1022                 clear_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags);
1023                 delayed_node->count--;
1024
1025                 delayed_root = delayed_node->root->fs_info->delayed_root;
1026                 finish_one_item(delayed_root);
1027         }
1028 }
1029
1030 static void btrfs_release_delayed_iref(struct btrfs_delayed_node *delayed_node)
1031 {
1032         struct btrfs_delayed_root *delayed_root;
1033
1034         ASSERT(delayed_node->root);
1035         clear_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags);
1036         delayed_node->count--;
1037
1038         delayed_root = delayed_node->root->fs_info->delayed_root;
1039         finish_one_item(delayed_root);
1040 }
1041
1042 static int __btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
1043                                         struct btrfs_root *root,
1044                                         struct btrfs_path *path,
1045                                         struct btrfs_delayed_node *node)
1046 {
1047         struct btrfs_fs_info *fs_info = root->fs_info;
1048         struct btrfs_key key;
1049         struct btrfs_inode_item *inode_item;
1050         struct extent_buffer *leaf;
1051         unsigned int nofs_flag;
1052         int mod;
1053         int ret;
1054
1055         key.objectid = node->inode_id;
1056         key.type = BTRFS_INODE_ITEM_KEY;
1057         key.offset = 0;
1058
1059         if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags))
1060                 mod = -1;
1061         else
1062                 mod = 1;
1063
1064         nofs_flag = memalloc_nofs_save();
1065         ret = btrfs_lookup_inode(trans, root, path, &key, mod);
1066         memalloc_nofs_restore(nofs_flag);
1067         if (ret > 0)
1068                 ret = -ENOENT;
1069         if (ret < 0)
1070                 goto out;
1071
1072         leaf = path->nodes[0];
1073         inode_item = btrfs_item_ptr(leaf, path->slots[0],
1074                                     struct btrfs_inode_item);
1075         write_extent_buffer(leaf, &node->inode_item, (unsigned long)inode_item,
1076                             sizeof(struct btrfs_inode_item));
1077         btrfs_mark_buffer_dirty(leaf);
1078
1079         if (!test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &node->flags))
1080                 goto no_iref;
1081
1082         path->slots[0]++;
1083         if (path->slots[0] >= btrfs_header_nritems(leaf))
1084                 goto search;
1085 again:
1086         btrfs_item_key_to_cpu(leaf, &key, path->slots[0]);
1087         if (key.objectid != node->inode_id)
1088                 goto out;
1089
1090         if (key.type != BTRFS_INODE_REF_KEY &&
1091             key.type != BTRFS_INODE_EXTREF_KEY)
1092                 goto out;
1093
1094         /*
1095          * Delayed iref deletion is for the inode who has only one link,
1096          * so there is only one iref. The case that several irefs are
1097          * in the same item doesn't exist.
1098          */
1099         btrfs_del_item(trans, root, path);
1100 out:
1101         btrfs_release_delayed_iref(node);
1102 no_iref:
1103         btrfs_release_path(path);
1104 err_out:
1105         btrfs_delayed_inode_release_metadata(fs_info, node);
1106         btrfs_release_delayed_inode(node);
1107
1108         /*
1109          * If we fail to update the delayed inode we need to abort the
1110          * transaction, because we could leave the inode with the improper
1111          * counts behind.
1112          */
1113         if (ret && ret != -ENOENT)
1114                 btrfs_abort_transaction(trans, ret);
1115
1116         return ret;
1117
1118 search:
1119         btrfs_release_path(path);
1120
1121         key.type = BTRFS_INODE_EXTREF_KEY;
1122         key.offset = -1;
1123
1124         nofs_flag = memalloc_nofs_save();
1125         ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
1126         memalloc_nofs_restore(nofs_flag);
1127         if (ret < 0)
1128                 goto err_out;
1129         ASSERT(ret);
1130
1131         ret = 0;
1132         leaf = path->nodes[0];
1133         path->slots[0]--;
1134         goto again;
1135 }
1136
1137 static inline int btrfs_update_delayed_inode(struct btrfs_trans_handle *trans,
1138                                              struct btrfs_root *root,
1139                                              struct btrfs_path *path,
1140                                              struct btrfs_delayed_node *node)
1141 {
1142         int ret;
1143
1144         mutex_lock(&node->mutex);
1145         if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &node->flags)) {
1146                 mutex_unlock(&node->mutex);
1147                 return 0;
1148         }
1149
1150         ret = __btrfs_update_delayed_inode(trans, root, path, node);
1151         mutex_unlock(&node->mutex);
1152         return ret;
1153 }
1154
1155 static inline int
1156 __btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans,
1157                                    struct btrfs_path *path,
1158                                    struct btrfs_delayed_node *node)
1159 {
1160         int ret;
1161
1162         ret = btrfs_insert_delayed_items(trans, path, node->root, node);
1163         if (ret)
1164                 return ret;
1165
1166         ret = btrfs_delete_delayed_items(trans, path, node->root, node);
1167         if (ret)
1168                 return ret;
1169
1170         ret = btrfs_update_delayed_inode(trans, node->root, path, node);
1171         return ret;
1172 }
1173
1174 /*
1175  * Called when committing the transaction.
1176  * Returns 0 on success.
1177  * Returns < 0 on error and returns with an aborted transaction with any
1178  * outstanding delayed items cleaned up.
1179  */
1180 static int __btrfs_run_delayed_items(struct btrfs_trans_handle *trans,
1181                                      struct btrfs_fs_info *fs_info, int nr)
1182 {
1183         struct btrfs_delayed_root *delayed_root;
1184         struct btrfs_delayed_node *curr_node, *prev_node;
1185         struct btrfs_path *path;
1186         struct btrfs_block_rsv *block_rsv;
1187         int ret = 0;
1188         bool count = (nr > 0);
1189
1190         if (trans->aborted)
1191                 return -EIO;
1192
1193         path = btrfs_alloc_path();
1194         if (!path)
1195                 return -ENOMEM;
1196         path->leave_spinning = 1;
1197
1198         block_rsv = trans->block_rsv;
1199         trans->block_rsv = &fs_info->delayed_block_rsv;
1200
1201         delayed_root = fs_info->delayed_root;
1202
1203         curr_node = btrfs_first_delayed_node(delayed_root);
1204         while (curr_node && (!count || (count && nr--))) {
1205                 ret = __btrfs_commit_inode_delayed_items(trans, path,
1206                                                          curr_node);
1207                 if (ret) {
1208                         btrfs_release_delayed_node(curr_node);
1209                         curr_node = NULL;
1210                         btrfs_abort_transaction(trans, ret);
1211                         break;
1212                 }
1213
1214                 prev_node = curr_node;
1215                 curr_node = btrfs_next_delayed_node(curr_node);
1216                 btrfs_release_delayed_node(prev_node);
1217         }
1218
1219         if (curr_node)
1220                 btrfs_release_delayed_node(curr_node);
1221         btrfs_free_path(path);
1222         trans->block_rsv = block_rsv;
1223
1224         return ret;
1225 }
1226
1227 int btrfs_run_delayed_items(struct btrfs_trans_handle *trans,
1228                             struct btrfs_fs_info *fs_info)
1229 {
1230         return __btrfs_run_delayed_items(trans, fs_info, -1);
1231 }
1232
1233 int btrfs_run_delayed_items_nr(struct btrfs_trans_handle *trans,
1234                                struct btrfs_fs_info *fs_info, int nr)
1235 {
1236         return __btrfs_run_delayed_items(trans, fs_info, nr);
1237 }
1238
1239 int btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans,
1240                                      struct btrfs_inode *inode)
1241 {
1242         struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode);
1243         struct btrfs_path *path;
1244         struct btrfs_block_rsv *block_rsv;
1245         int ret;
1246
1247         if (!delayed_node)
1248                 return 0;
1249
1250         mutex_lock(&delayed_node->mutex);
1251         if (!delayed_node->count) {
1252                 mutex_unlock(&delayed_node->mutex);
1253                 btrfs_release_delayed_node(delayed_node);
1254                 return 0;
1255         }
1256         mutex_unlock(&delayed_node->mutex);
1257
1258         path = btrfs_alloc_path();
1259         if (!path) {
1260                 btrfs_release_delayed_node(delayed_node);
1261                 return -ENOMEM;
1262         }
1263         path->leave_spinning = 1;
1264
1265         block_rsv = trans->block_rsv;
1266         trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv;
1267
1268         ret = __btrfs_commit_inode_delayed_items(trans, path, delayed_node);
1269
1270         btrfs_release_delayed_node(delayed_node);
1271         btrfs_free_path(path);
1272         trans->block_rsv = block_rsv;
1273
1274         return ret;
1275 }
1276
1277 int btrfs_commit_inode_delayed_inode(struct btrfs_inode *inode)
1278 {
1279         struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb);
1280         struct btrfs_trans_handle *trans;
1281         struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode);
1282         struct btrfs_path *path;
1283         struct btrfs_block_rsv *block_rsv;
1284         int ret;
1285
1286         if (!delayed_node)
1287                 return 0;
1288
1289         mutex_lock(&delayed_node->mutex);
1290         if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) {
1291                 mutex_unlock(&delayed_node->mutex);
1292                 btrfs_release_delayed_node(delayed_node);
1293                 return 0;
1294         }
1295         mutex_unlock(&delayed_node->mutex);
1296
1297         trans = btrfs_join_transaction(delayed_node->root);
1298         if (IS_ERR(trans)) {
1299                 ret = PTR_ERR(trans);
1300                 goto out;
1301         }
1302
1303         path = btrfs_alloc_path();
1304         if (!path) {
1305                 ret = -ENOMEM;
1306                 goto trans_out;
1307         }
1308         path->leave_spinning = 1;
1309
1310         block_rsv = trans->block_rsv;
1311         trans->block_rsv = &fs_info->delayed_block_rsv;
1312
1313         mutex_lock(&delayed_node->mutex);
1314         if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags))
1315                 ret = __btrfs_update_delayed_inode(trans, delayed_node->root,
1316                                                    path, delayed_node);
1317         else
1318                 ret = 0;
1319         mutex_unlock(&delayed_node->mutex);
1320
1321         btrfs_free_path(path);
1322         trans->block_rsv = block_rsv;
1323 trans_out:
1324         btrfs_end_transaction(trans);
1325         btrfs_btree_balance_dirty(fs_info);
1326 out:
1327         btrfs_release_delayed_node(delayed_node);
1328
1329         return ret;
1330 }
1331
1332 void btrfs_remove_delayed_node(struct btrfs_inode *inode)
1333 {
1334         struct btrfs_delayed_node *delayed_node;
1335
1336         delayed_node = READ_ONCE(inode->delayed_node);
1337         if (!delayed_node)
1338                 return;
1339
1340         inode->delayed_node = NULL;
1341         btrfs_release_delayed_node(delayed_node);
1342 }
1343
1344 struct btrfs_async_delayed_work {
1345         struct btrfs_delayed_root *delayed_root;
1346         int nr;
1347         struct btrfs_work work;
1348 };
1349
1350 static void btrfs_async_run_delayed_root(struct btrfs_work *work)
1351 {
1352         struct btrfs_async_delayed_work *async_work;
1353         struct btrfs_delayed_root *delayed_root;
1354         struct btrfs_trans_handle *trans;
1355         struct btrfs_path *path;
1356         struct btrfs_delayed_node *delayed_node = NULL;
1357         struct btrfs_root *root;
1358         struct btrfs_block_rsv *block_rsv;
1359         int total_done = 0;
1360
1361         async_work = container_of(work, struct btrfs_async_delayed_work, work);
1362         delayed_root = async_work->delayed_root;
1363
1364         path = btrfs_alloc_path();
1365         if (!path)
1366                 goto out;
1367
1368 again:
1369         if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND / 2)
1370                 goto free_path;
1371
1372         delayed_node = btrfs_first_prepared_delayed_node(delayed_root);
1373         if (!delayed_node)
1374                 goto free_path;
1375
1376         path->leave_spinning = 1;
1377         root = delayed_node->root;
1378
1379         trans = btrfs_join_transaction(root);
1380         if (IS_ERR(trans))
1381                 goto release_path;
1382
1383         block_rsv = trans->block_rsv;
1384         trans->block_rsv = &root->fs_info->delayed_block_rsv;
1385
1386         __btrfs_commit_inode_delayed_items(trans, path, delayed_node);
1387
1388         trans->block_rsv = block_rsv;
1389         btrfs_end_transaction(trans);
1390         btrfs_btree_balance_dirty_nodelay(root->fs_info);
1391
1392 release_path:
1393         btrfs_release_path(path);
1394         total_done++;
1395
1396         btrfs_release_prepared_delayed_node(delayed_node);
1397         if ((async_work->nr == 0 && total_done < BTRFS_DELAYED_WRITEBACK) ||
1398             total_done < async_work->nr)
1399                 goto again;
1400
1401 free_path:
1402         btrfs_free_path(path);
1403 out:
1404         wake_up(&delayed_root->wait);
1405         kfree(async_work);
1406 }
1407
1408
1409 static int btrfs_wq_run_delayed_node(struct btrfs_delayed_root *delayed_root,
1410                                      struct btrfs_fs_info *fs_info, int nr)
1411 {
1412         struct btrfs_async_delayed_work *async_work;
1413
1414         if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND ||
1415             btrfs_workqueue_normal_congested(fs_info->delayed_workers))
1416                 return 0;
1417
1418         async_work = kmalloc(sizeof(*async_work), GFP_NOFS);
1419         if (!async_work)
1420                 return -ENOMEM;
1421
1422         async_work->delayed_root = delayed_root;
1423         btrfs_init_work(&async_work->work, btrfs_delayed_meta_helper,
1424                         btrfs_async_run_delayed_root, NULL, NULL);
1425         async_work->nr = nr;
1426
1427         btrfs_queue_work(fs_info->delayed_workers, &async_work->work);
1428         return 0;
1429 }
1430
1431 void btrfs_assert_delayed_root_empty(struct btrfs_fs_info *fs_info)
1432 {
1433         WARN_ON(btrfs_first_delayed_node(fs_info->delayed_root));
1434 }
1435
1436 static int could_end_wait(struct btrfs_delayed_root *delayed_root, int seq)
1437 {
1438         int val = atomic_read(&delayed_root->items_seq);
1439
1440         if (val < seq || val >= seq + BTRFS_DELAYED_BATCH)
1441                 return 1;
1442
1443         if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND)
1444                 return 1;
1445
1446         return 0;
1447 }
1448
1449 void btrfs_balance_delayed_items(struct btrfs_fs_info *fs_info)
1450 {
1451         struct btrfs_delayed_root *delayed_root = fs_info->delayed_root;
1452
1453         if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND)
1454                 return;
1455
1456         if (atomic_read(&delayed_root->items) >= BTRFS_DELAYED_WRITEBACK) {
1457                 int seq;
1458                 int ret;
1459
1460                 seq = atomic_read(&delayed_root->items_seq);
1461
1462                 ret = btrfs_wq_run_delayed_node(delayed_root, fs_info, 0);
1463                 if (ret)
1464                         return;
1465
1466                 wait_event_interruptible(delayed_root->wait,
1467                                          could_end_wait(delayed_root, seq));
1468                 return;
1469         }
1470
1471         btrfs_wq_run_delayed_node(delayed_root, fs_info, BTRFS_DELAYED_BATCH);
1472 }
1473
1474 /* Will return 0 or -ENOMEM */
1475 int btrfs_insert_delayed_dir_index(struct btrfs_trans_handle *trans,
1476                                    struct btrfs_fs_info *fs_info,
1477                                    const char *name, int name_len,
1478                                    struct btrfs_inode *dir,
1479                                    struct btrfs_disk_key *disk_key, u8 type,
1480                                    u64 index)
1481 {
1482         struct btrfs_delayed_node *delayed_node;
1483         struct btrfs_delayed_item *delayed_item;
1484         struct btrfs_dir_item *dir_item;
1485         int ret;
1486
1487         delayed_node = btrfs_get_or_create_delayed_node(dir);
1488         if (IS_ERR(delayed_node))
1489                 return PTR_ERR(delayed_node);
1490
1491         delayed_item = btrfs_alloc_delayed_item(sizeof(*dir_item) + name_len);
1492         if (!delayed_item) {
1493                 ret = -ENOMEM;
1494                 goto release_node;
1495         }
1496
1497         delayed_item->key.objectid = btrfs_ino(dir);
1498         delayed_item->key.type = BTRFS_DIR_INDEX_KEY;
1499         delayed_item->key.offset = index;
1500
1501         dir_item = (struct btrfs_dir_item *)delayed_item->data;
1502         dir_item->location = *disk_key;
1503         btrfs_set_stack_dir_transid(dir_item, trans->transid);
1504         btrfs_set_stack_dir_data_len(dir_item, 0);
1505         btrfs_set_stack_dir_name_len(dir_item, name_len);
1506         btrfs_set_stack_dir_type(dir_item, type);
1507         memcpy((char *)(dir_item + 1), name, name_len);
1508
1509         ret = btrfs_delayed_item_reserve_metadata(trans, fs_info, delayed_item);
1510         /*
1511          * we have reserved enough space when we start a new transaction,
1512          * so reserving metadata failure is impossible
1513          */
1514         BUG_ON(ret);
1515
1516
1517         mutex_lock(&delayed_node->mutex);
1518         ret = __btrfs_add_delayed_insertion_item(delayed_node, delayed_item);
1519         if (unlikely(ret)) {
1520                 btrfs_err(fs_info,
1521                           "err add delayed dir index item(name: %.*s) into the insertion tree of the delayed node(root id: %llu, inode id: %llu, errno: %d)",
1522                           name_len, name, delayed_node->root->objectid,
1523                           delayed_node->inode_id, ret);
1524                 BUG();
1525         }
1526         mutex_unlock(&delayed_node->mutex);
1527
1528 release_node:
1529         btrfs_release_delayed_node(delayed_node);
1530         return ret;
1531 }
1532
1533 static int btrfs_delete_delayed_insertion_item(struct btrfs_fs_info *fs_info,
1534                                                struct btrfs_delayed_node *node,
1535                                                struct btrfs_key *key)
1536 {
1537         struct btrfs_delayed_item *item;
1538
1539         mutex_lock(&node->mutex);
1540         item = __btrfs_lookup_delayed_insertion_item(node, key);
1541         if (!item) {
1542                 mutex_unlock(&node->mutex);
1543                 return 1;
1544         }
1545
1546         btrfs_delayed_item_release_metadata(fs_info, item);
1547         btrfs_release_delayed_item(item);
1548         mutex_unlock(&node->mutex);
1549         return 0;
1550 }
1551
1552 int btrfs_delete_delayed_dir_index(struct btrfs_trans_handle *trans,
1553                                    struct btrfs_fs_info *fs_info,
1554                                    struct btrfs_inode *dir, u64 index)
1555 {
1556         struct btrfs_delayed_node *node;
1557         struct btrfs_delayed_item *item;
1558         struct btrfs_key item_key;
1559         int ret;
1560
1561         node = btrfs_get_or_create_delayed_node(dir);
1562         if (IS_ERR(node))
1563                 return PTR_ERR(node);
1564
1565         item_key.objectid = btrfs_ino(dir);
1566         item_key.type = BTRFS_DIR_INDEX_KEY;
1567         item_key.offset = index;
1568
1569         ret = btrfs_delete_delayed_insertion_item(fs_info, node, &item_key);
1570         if (!ret)
1571                 goto end;
1572
1573         item = btrfs_alloc_delayed_item(0);
1574         if (!item) {
1575                 ret = -ENOMEM;
1576                 goto end;
1577         }
1578
1579         item->key = item_key;
1580
1581         ret = btrfs_delayed_item_reserve_metadata(trans, fs_info, item);
1582         /*
1583          * we have reserved enough space when we start a new transaction,
1584          * so reserving metadata failure is impossible.
1585          */
1586         BUG_ON(ret);
1587
1588         mutex_lock(&node->mutex);
1589         ret = __btrfs_add_delayed_deletion_item(node, item);
1590         if (unlikely(ret)) {
1591                 btrfs_err(fs_info,
1592                           "err add delayed dir index item(index: %llu) into the deletion tree of the delayed node(root id: %llu, inode id: %llu, errno: %d)",
1593                           index, node->root->objectid, node->inode_id, ret);
1594                 BUG();
1595         }
1596         mutex_unlock(&node->mutex);
1597 end:
1598         btrfs_release_delayed_node(node);
1599         return ret;
1600 }
1601
1602 int btrfs_inode_delayed_dir_index_count(struct btrfs_inode *inode)
1603 {
1604         struct btrfs_delayed_node *delayed_node = btrfs_get_delayed_node(inode);
1605
1606         if (!delayed_node)
1607                 return -ENOENT;
1608
1609         /*
1610          * Since we have held i_mutex of this directory, it is impossible that
1611          * a new directory index is added into the delayed node and index_cnt
1612          * is updated now. So we needn't lock the delayed node.
1613          */
1614         if (!delayed_node->index_cnt) {
1615                 btrfs_release_delayed_node(delayed_node);
1616                 return -EINVAL;
1617         }
1618
1619         inode->index_cnt = delayed_node->index_cnt;
1620         btrfs_release_delayed_node(delayed_node);
1621         return 0;
1622 }
1623
1624 bool btrfs_readdir_get_delayed_items(struct inode *inode,
1625                                      struct list_head *ins_list,
1626                                      struct list_head *del_list)
1627 {
1628         struct btrfs_delayed_node *delayed_node;
1629         struct btrfs_delayed_item *item;
1630
1631         delayed_node = btrfs_get_delayed_node(BTRFS_I(inode));
1632         if (!delayed_node)
1633                 return false;
1634
1635         /*
1636          * We can only do one readdir with delayed items at a time because of
1637          * item->readdir_list.
1638          */
1639         inode_unlock_shared(inode);
1640         inode_lock(inode);
1641
1642         mutex_lock(&delayed_node->mutex);
1643         item = __btrfs_first_delayed_insertion_item(delayed_node);
1644         while (item) {
1645                 refcount_inc(&item->refs);
1646                 list_add_tail(&item->readdir_list, ins_list);
1647                 item = __btrfs_next_delayed_item(item);
1648         }
1649
1650         item = __btrfs_first_delayed_deletion_item(delayed_node);
1651         while (item) {
1652                 refcount_inc(&item->refs);
1653                 list_add_tail(&item->readdir_list, del_list);
1654                 item = __btrfs_next_delayed_item(item);
1655         }
1656         mutex_unlock(&delayed_node->mutex);
1657         /*
1658          * This delayed node is still cached in the btrfs inode, so refs
1659          * must be > 1 now, and we needn't check it is going to be freed
1660          * or not.
1661          *
1662          * Besides that, this function is used to read dir, we do not
1663          * insert/delete delayed items in this period. So we also needn't
1664          * requeue or dequeue this delayed node.
1665          */
1666         refcount_dec(&delayed_node->refs);
1667
1668         return true;
1669 }
1670
1671 void btrfs_readdir_put_delayed_items(struct inode *inode,
1672                                      struct list_head *ins_list,
1673                                      struct list_head *del_list)
1674 {
1675         struct btrfs_delayed_item *curr, *next;
1676
1677         list_for_each_entry_safe(curr, next, ins_list, readdir_list) {
1678                 list_del(&curr->readdir_list);
1679                 if (refcount_dec_and_test(&curr->refs))
1680                         kfree(curr);
1681         }
1682
1683         list_for_each_entry_safe(curr, next, del_list, readdir_list) {
1684                 list_del(&curr->readdir_list);
1685                 if (refcount_dec_and_test(&curr->refs))
1686                         kfree(curr);
1687         }
1688
1689         /*
1690          * The VFS is going to do up_read(), so we need to downgrade back to a
1691          * read lock.
1692          */
1693         downgrade_write(&inode->i_rwsem);
1694 }
1695
1696 int btrfs_should_delete_dir_index(struct list_head *del_list,
1697                                   u64 index)
1698 {
1699         struct btrfs_delayed_item *curr;
1700         int ret = 0;
1701
1702         list_for_each_entry(curr, del_list, readdir_list) {
1703                 if (curr->key.offset > index)
1704                         break;
1705                 if (curr->key.offset == index) {
1706                         ret = 1;
1707                         break;
1708                 }
1709         }
1710         return ret;
1711 }
1712
1713 /*
1714  * btrfs_readdir_delayed_dir_index - read dir info stored in the delayed tree
1715  *
1716  */
1717 int btrfs_readdir_delayed_dir_index(struct dir_context *ctx,
1718                                     struct list_head *ins_list)
1719 {
1720         struct btrfs_dir_item *di;
1721         struct btrfs_delayed_item *curr, *next;
1722         struct btrfs_key location;
1723         char *name;
1724         int name_len;
1725         int over = 0;
1726         unsigned char d_type;
1727
1728         if (list_empty(ins_list))
1729                 return 0;
1730
1731         /*
1732          * Changing the data of the delayed item is impossible. So
1733          * we needn't lock them. And we have held i_mutex of the
1734          * directory, nobody can delete any directory indexes now.
1735          */
1736         list_for_each_entry_safe(curr, next, ins_list, readdir_list) {
1737                 list_del(&curr->readdir_list);
1738
1739                 if (curr->key.offset < ctx->pos) {
1740                         if (refcount_dec_and_test(&curr->refs))
1741                                 kfree(curr);
1742                         continue;
1743                 }
1744
1745                 ctx->pos = curr->key.offset;
1746
1747                 di = (struct btrfs_dir_item *)curr->data;
1748                 name = (char *)(di + 1);
1749                 name_len = btrfs_stack_dir_name_len(di);
1750
1751                 d_type = btrfs_filetype_table[di->type];
1752                 btrfs_disk_key_to_cpu(&location, &di->location);
1753
1754                 over = !dir_emit(ctx, name, name_len,
1755                                location.objectid, d_type);
1756
1757                 if (refcount_dec_and_test(&curr->refs))
1758                         kfree(curr);
1759
1760                 if (over)
1761                         return 1;
1762                 ctx->pos++;
1763         }
1764         return 0;
1765 }
1766
1767 static void fill_stack_inode_item(struct btrfs_trans_handle *trans,
1768                                   struct btrfs_inode_item *inode_item,
1769                                   struct inode *inode)
1770 {
1771         btrfs_set_stack_inode_uid(inode_item, i_uid_read(inode));
1772         btrfs_set_stack_inode_gid(inode_item, i_gid_read(inode));
1773         btrfs_set_stack_inode_size(inode_item, BTRFS_I(inode)->disk_i_size);
1774         btrfs_set_stack_inode_mode(inode_item, inode->i_mode);
1775         btrfs_set_stack_inode_nlink(inode_item, inode->i_nlink);
1776         btrfs_set_stack_inode_nbytes(inode_item, inode_get_bytes(inode));
1777         btrfs_set_stack_inode_generation(inode_item,
1778                                          BTRFS_I(inode)->generation);
1779         btrfs_set_stack_inode_sequence(inode_item, inode->i_version);
1780         btrfs_set_stack_inode_transid(inode_item, trans->transid);
1781         btrfs_set_stack_inode_rdev(inode_item, inode->i_rdev);
1782         btrfs_set_stack_inode_flags(inode_item, BTRFS_I(inode)->flags);
1783         btrfs_set_stack_inode_block_group(inode_item, 0);
1784
1785         btrfs_set_stack_timespec_sec(&inode_item->atime,
1786                                      inode->i_atime.tv_sec);
1787         btrfs_set_stack_timespec_nsec(&inode_item->atime,
1788                                       inode->i_atime.tv_nsec);
1789
1790         btrfs_set_stack_timespec_sec(&inode_item->mtime,
1791                                      inode->i_mtime.tv_sec);
1792         btrfs_set_stack_timespec_nsec(&inode_item->mtime,
1793                                       inode->i_mtime.tv_nsec);
1794
1795         btrfs_set_stack_timespec_sec(&inode_item->ctime,
1796                                      inode->i_ctime.tv_sec);
1797         btrfs_set_stack_timespec_nsec(&inode_item->ctime,
1798                                       inode->i_ctime.tv_nsec);
1799
1800         btrfs_set_stack_timespec_sec(&inode_item->otime,
1801                                      BTRFS_I(inode)->i_otime.tv_sec);
1802         btrfs_set_stack_timespec_nsec(&inode_item->otime,
1803                                      BTRFS_I(inode)->i_otime.tv_nsec);
1804 }
1805
1806 int btrfs_fill_inode(struct inode *inode, u32 *rdev)
1807 {
1808         struct btrfs_delayed_node *delayed_node;
1809         struct btrfs_inode_item *inode_item;
1810
1811         delayed_node = btrfs_get_delayed_node(BTRFS_I(inode));
1812         if (!delayed_node)
1813                 return -ENOENT;
1814
1815         mutex_lock(&delayed_node->mutex);
1816         if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) {
1817                 mutex_unlock(&delayed_node->mutex);
1818                 btrfs_release_delayed_node(delayed_node);
1819                 return -ENOENT;
1820         }
1821
1822         inode_item = &delayed_node->inode_item;
1823
1824         i_uid_write(inode, btrfs_stack_inode_uid(inode_item));
1825         i_gid_write(inode, btrfs_stack_inode_gid(inode_item));
1826         btrfs_i_size_write(BTRFS_I(inode), btrfs_stack_inode_size(inode_item));
1827         inode->i_mode = btrfs_stack_inode_mode(inode_item);
1828         set_nlink(inode, btrfs_stack_inode_nlink(inode_item));
1829         inode_set_bytes(inode, btrfs_stack_inode_nbytes(inode_item));
1830         BTRFS_I(inode)->generation = btrfs_stack_inode_generation(inode_item);
1831         BTRFS_I(inode)->last_trans = btrfs_stack_inode_transid(inode_item);
1832
1833         inode->i_version = btrfs_stack_inode_sequence(inode_item);
1834         inode->i_rdev = 0;
1835         *rdev = btrfs_stack_inode_rdev(inode_item);
1836         BTRFS_I(inode)->flags = btrfs_stack_inode_flags(inode_item);
1837
1838         inode->i_atime.tv_sec = btrfs_stack_timespec_sec(&inode_item->atime);
1839         inode->i_atime.tv_nsec = btrfs_stack_timespec_nsec(&inode_item->atime);
1840
1841         inode->i_mtime.tv_sec = btrfs_stack_timespec_sec(&inode_item->mtime);
1842         inode->i_mtime.tv_nsec = btrfs_stack_timespec_nsec(&inode_item->mtime);
1843
1844         inode->i_ctime.tv_sec = btrfs_stack_timespec_sec(&inode_item->ctime);
1845         inode->i_ctime.tv_nsec = btrfs_stack_timespec_nsec(&inode_item->ctime);
1846
1847         BTRFS_I(inode)->i_otime.tv_sec =
1848                 btrfs_stack_timespec_sec(&inode_item->otime);
1849         BTRFS_I(inode)->i_otime.tv_nsec =
1850                 btrfs_stack_timespec_nsec(&inode_item->otime);
1851
1852         inode->i_generation = BTRFS_I(inode)->generation;
1853         BTRFS_I(inode)->index_cnt = (u64)-1;
1854
1855         mutex_unlock(&delayed_node->mutex);
1856         btrfs_release_delayed_node(delayed_node);
1857         return 0;
1858 }
1859
1860 int btrfs_delayed_update_inode(struct btrfs_trans_handle *trans,
1861                                struct btrfs_root *root, struct inode *inode)
1862 {
1863         struct btrfs_delayed_node *delayed_node;
1864         int ret = 0;
1865
1866         delayed_node = btrfs_get_or_create_delayed_node(BTRFS_I(inode));
1867         if (IS_ERR(delayed_node))
1868                 return PTR_ERR(delayed_node);
1869
1870         mutex_lock(&delayed_node->mutex);
1871         if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) {
1872                 fill_stack_inode_item(trans, &delayed_node->inode_item, inode);
1873                 goto release_node;
1874         }
1875
1876         ret = btrfs_delayed_inode_reserve_metadata(trans, root, BTRFS_I(inode),
1877                                                    delayed_node);
1878         if (ret)
1879                 goto release_node;
1880
1881         fill_stack_inode_item(trans, &delayed_node->inode_item, inode);
1882         set_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags);
1883         delayed_node->count++;
1884         atomic_inc(&root->fs_info->delayed_root->items);
1885 release_node:
1886         mutex_unlock(&delayed_node->mutex);
1887         btrfs_release_delayed_node(delayed_node);
1888         return ret;
1889 }
1890
1891 int btrfs_delayed_delete_inode_ref(struct btrfs_inode *inode)
1892 {
1893         struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb);
1894         struct btrfs_delayed_node *delayed_node;
1895
1896         /*
1897          * we don't do delayed inode updates during log recovery because it
1898          * leads to enospc problems.  This means we also can't do
1899          * delayed inode refs
1900          */
1901         if (test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags))
1902                 return -EAGAIN;
1903
1904         delayed_node = btrfs_get_or_create_delayed_node(inode);
1905         if (IS_ERR(delayed_node))
1906                 return PTR_ERR(delayed_node);
1907
1908         /*
1909          * We don't reserve space for inode ref deletion is because:
1910          * - We ONLY do async inode ref deletion for the inode who has only
1911          *   one link(i_nlink == 1), it means there is only one inode ref.
1912          *   And in most case, the inode ref and the inode item are in the
1913          *   same leaf, and we will deal with them at the same time.
1914          *   Since we are sure we will reserve the space for the inode item,
1915          *   it is unnecessary to reserve space for inode ref deletion.
1916          * - If the inode ref and the inode item are not in the same leaf,
1917          *   We also needn't worry about enospc problem, because we reserve
1918          *   much more space for the inode update than it needs.
1919          * - At the worst, we can steal some space from the global reservation.
1920          *   It is very rare.
1921          */
1922         mutex_lock(&delayed_node->mutex);
1923         if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags))
1924                 goto release_node;
1925
1926         set_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags);
1927         delayed_node->count++;
1928         atomic_inc(&fs_info->delayed_root->items);
1929 release_node:
1930         mutex_unlock(&delayed_node->mutex);
1931         btrfs_release_delayed_node(delayed_node);
1932         return 0;
1933 }
1934
1935 static void __btrfs_kill_delayed_node(struct btrfs_delayed_node *delayed_node)
1936 {
1937         struct btrfs_root *root = delayed_node->root;
1938         struct btrfs_fs_info *fs_info = root->fs_info;
1939         struct btrfs_delayed_item *curr_item, *prev_item;
1940
1941         mutex_lock(&delayed_node->mutex);
1942         curr_item = __btrfs_first_delayed_insertion_item(delayed_node);
1943         while (curr_item) {
1944                 btrfs_delayed_item_release_metadata(fs_info, curr_item);
1945                 prev_item = curr_item;
1946                 curr_item = __btrfs_next_delayed_item(prev_item);
1947                 btrfs_release_delayed_item(prev_item);
1948         }
1949
1950         curr_item = __btrfs_first_delayed_deletion_item(delayed_node);
1951         while (curr_item) {
1952                 btrfs_delayed_item_release_metadata(fs_info, curr_item);
1953                 prev_item = curr_item;
1954                 curr_item = __btrfs_next_delayed_item(prev_item);
1955                 btrfs_release_delayed_item(prev_item);
1956         }
1957
1958         if (test_bit(BTRFS_DELAYED_NODE_DEL_IREF, &delayed_node->flags))
1959                 btrfs_release_delayed_iref(delayed_node);
1960
1961         if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) {
1962                 btrfs_delayed_inode_release_metadata(fs_info, delayed_node);
1963                 btrfs_release_delayed_inode(delayed_node);
1964         }
1965         mutex_unlock(&delayed_node->mutex);
1966 }
1967
1968 void btrfs_kill_delayed_inode_items(struct btrfs_inode *inode)
1969 {
1970         struct btrfs_delayed_node *delayed_node;
1971
1972         delayed_node = btrfs_get_delayed_node(inode);
1973         if (!delayed_node)
1974                 return;
1975
1976         __btrfs_kill_delayed_node(delayed_node);
1977         btrfs_release_delayed_node(delayed_node);
1978 }
1979
1980 void btrfs_kill_all_delayed_nodes(struct btrfs_root *root)
1981 {
1982         u64 inode_id = 0;
1983         struct btrfs_delayed_node *delayed_nodes[8];
1984         int i, n;
1985
1986         while (1) {
1987                 spin_lock(&root->inode_lock);
1988                 n = radix_tree_gang_lookup(&root->delayed_nodes_tree,
1989                                            (void **)delayed_nodes, inode_id,
1990                                            ARRAY_SIZE(delayed_nodes));
1991                 if (!n) {
1992                         spin_unlock(&root->inode_lock);
1993                         break;
1994                 }
1995
1996                 inode_id = delayed_nodes[n - 1]->inode_id + 1;
1997                 for (i = 0; i < n; i++) {
1998                         /*
1999                          * Don't increase refs in case the node is dead and
2000                          * about to be removed from the tree in the loop below
2001                          */
2002                         if (!refcount_inc_not_zero(&delayed_nodes[i]->refs))
2003                                 delayed_nodes[i] = NULL;
2004                 }
2005                 spin_unlock(&root->inode_lock);
2006
2007                 for (i = 0; i < n; i++) {
2008                         if (!delayed_nodes[i])
2009                                 continue;
2010                         __btrfs_kill_delayed_node(delayed_nodes[i]);
2011                         btrfs_release_delayed_node(delayed_nodes[i]);
2012                 }
2013         }
2014 }
2015
2016 void btrfs_destroy_delayed_inodes(struct btrfs_fs_info *fs_info)
2017 {
2018         struct btrfs_delayed_node *curr_node, *prev_node;
2019
2020         curr_node = btrfs_first_delayed_node(fs_info->delayed_root);
2021         while (curr_node) {
2022                 __btrfs_kill_delayed_node(curr_node);
2023
2024                 prev_node = curr_node;
2025                 curr_node = btrfs_next_delayed_node(curr_node);
2026                 btrfs_release_delayed_node(prev_node);
2027         }
2028 }
2029