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