xref: /openbmc/linux/fs/btrfs/qgroup.c (revision afb46f79)
1 /*
2  * Copyright (C) 2011 STRATO.  All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public
6  * License v2 as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11  * General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public
14  * License along with this program; if not, write to the
15  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16  * Boston, MA 021110-1307, USA.
17  */
18 
19 #include <linux/sched.h>
20 #include <linux/pagemap.h>
21 #include <linux/writeback.h>
22 #include <linux/blkdev.h>
23 #include <linux/rbtree.h>
24 #include <linux/slab.h>
25 #include <linux/workqueue.h>
26 #include <linux/btrfs.h>
27 
28 #include "ctree.h"
29 #include "transaction.h"
30 #include "disk-io.h"
31 #include "locking.h"
32 #include "ulist.h"
33 #include "backref.h"
34 #include "extent_io.h"
35 
36 /* TODO XXX FIXME
37  *  - subvol delete -> delete when ref goes to 0? delete limits also?
38  *  - reorganize keys
39  *  - compressed
40  *  - sync
41  *  - copy also limits on subvol creation
42  *  - limit
43  *  - caches fuer ulists
44  *  - performance benchmarks
45  *  - check all ioctl parameters
46  */
47 
48 /*
49  * one struct for each qgroup, organized in fs_info->qgroup_tree.
50  */
51 struct btrfs_qgroup {
52 	u64 qgroupid;
53 
54 	/*
55 	 * state
56 	 */
57 	u64 rfer;	/* referenced */
58 	u64 rfer_cmpr;	/* referenced compressed */
59 	u64 excl;	/* exclusive */
60 	u64 excl_cmpr;	/* exclusive compressed */
61 
62 	/*
63 	 * limits
64 	 */
65 	u64 lim_flags;	/* which limits are set */
66 	u64 max_rfer;
67 	u64 max_excl;
68 	u64 rsv_rfer;
69 	u64 rsv_excl;
70 
71 	/*
72 	 * reservation tracking
73 	 */
74 	u64 reserved;
75 
76 	/*
77 	 * lists
78 	 */
79 	struct list_head groups;  /* groups this group is member of */
80 	struct list_head members; /* groups that are members of this group */
81 	struct list_head dirty;   /* dirty groups */
82 	struct rb_node node;	  /* tree of qgroups */
83 
84 	/*
85 	 * temp variables for accounting operations
86 	 */
87 	u64 tag;
88 	u64 refcnt;
89 };
90 
91 /*
92  * glue structure to represent the relations between qgroups.
93  */
94 struct btrfs_qgroup_list {
95 	struct list_head next_group;
96 	struct list_head next_member;
97 	struct btrfs_qgroup *group;
98 	struct btrfs_qgroup *member;
99 };
100 
101 static int
102 qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid,
103 		   int init_flags);
104 static void qgroup_rescan_zero_tracking(struct btrfs_fs_info *fs_info);
105 
106 /* must be called with qgroup_ioctl_lock held */
107 static struct btrfs_qgroup *find_qgroup_rb(struct btrfs_fs_info *fs_info,
108 					   u64 qgroupid)
109 {
110 	struct rb_node *n = fs_info->qgroup_tree.rb_node;
111 	struct btrfs_qgroup *qgroup;
112 
113 	while (n) {
114 		qgroup = rb_entry(n, struct btrfs_qgroup, node);
115 		if (qgroup->qgroupid < qgroupid)
116 			n = n->rb_left;
117 		else if (qgroup->qgroupid > qgroupid)
118 			n = n->rb_right;
119 		else
120 			return qgroup;
121 	}
122 	return NULL;
123 }
124 
125 /* must be called with qgroup_lock held */
126 static struct btrfs_qgroup *add_qgroup_rb(struct btrfs_fs_info *fs_info,
127 					  u64 qgroupid)
128 {
129 	struct rb_node **p = &fs_info->qgroup_tree.rb_node;
130 	struct rb_node *parent = NULL;
131 	struct btrfs_qgroup *qgroup;
132 
133 	while (*p) {
134 		parent = *p;
135 		qgroup = rb_entry(parent, struct btrfs_qgroup, node);
136 
137 		if (qgroup->qgroupid < qgroupid)
138 			p = &(*p)->rb_left;
139 		else if (qgroup->qgroupid > qgroupid)
140 			p = &(*p)->rb_right;
141 		else
142 			return qgroup;
143 	}
144 
145 	qgroup = kzalloc(sizeof(*qgroup), GFP_ATOMIC);
146 	if (!qgroup)
147 		return ERR_PTR(-ENOMEM);
148 
149 	qgroup->qgroupid = qgroupid;
150 	INIT_LIST_HEAD(&qgroup->groups);
151 	INIT_LIST_HEAD(&qgroup->members);
152 	INIT_LIST_HEAD(&qgroup->dirty);
153 
154 	rb_link_node(&qgroup->node, parent, p);
155 	rb_insert_color(&qgroup->node, &fs_info->qgroup_tree);
156 
157 	return qgroup;
158 }
159 
160 static void __del_qgroup_rb(struct btrfs_qgroup *qgroup)
161 {
162 	struct btrfs_qgroup_list *list;
163 
164 	list_del(&qgroup->dirty);
165 	while (!list_empty(&qgroup->groups)) {
166 		list = list_first_entry(&qgroup->groups,
167 					struct btrfs_qgroup_list, next_group);
168 		list_del(&list->next_group);
169 		list_del(&list->next_member);
170 		kfree(list);
171 	}
172 
173 	while (!list_empty(&qgroup->members)) {
174 		list = list_first_entry(&qgroup->members,
175 					struct btrfs_qgroup_list, next_member);
176 		list_del(&list->next_group);
177 		list_del(&list->next_member);
178 		kfree(list);
179 	}
180 	kfree(qgroup);
181 }
182 
183 /* must be called with qgroup_lock held */
184 static int del_qgroup_rb(struct btrfs_fs_info *fs_info, u64 qgroupid)
185 {
186 	struct btrfs_qgroup *qgroup = find_qgroup_rb(fs_info, qgroupid);
187 
188 	if (!qgroup)
189 		return -ENOENT;
190 
191 	rb_erase(&qgroup->node, &fs_info->qgroup_tree);
192 	__del_qgroup_rb(qgroup);
193 	return 0;
194 }
195 
196 /* must be called with qgroup_lock held */
197 static int add_relation_rb(struct btrfs_fs_info *fs_info,
198 			   u64 memberid, u64 parentid)
199 {
200 	struct btrfs_qgroup *member;
201 	struct btrfs_qgroup *parent;
202 	struct btrfs_qgroup_list *list;
203 
204 	member = find_qgroup_rb(fs_info, memberid);
205 	parent = find_qgroup_rb(fs_info, parentid);
206 	if (!member || !parent)
207 		return -ENOENT;
208 
209 	list = kzalloc(sizeof(*list), GFP_ATOMIC);
210 	if (!list)
211 		return -ENOMEM;
212 
213 	list->group = parent;
214 	list->member = member;
215 	list_add_tail(&list->next_group, &member->groups);
216 	list_add_tail(&list->next_member, &parent->members);
217 
218 	return 0;
219 }
220 
221 /* must be called with qgroup_lock held */
222 static int del_relation_rb(struct btrfs_fs_info *fs_info,
223 			   u64 memberid, u64 parentid)
224 {
225 	struct btrfs_qgroup *member;
226 	struct btrfs_qgroup *parent;
227 	struct btrfs_qgroup_list *list;
228 
229 	member = find_qgroup_rb(fs_info, memberid);
230 	parent = find_qgroup_rb(fs_info, parentid);
231 	if (!member || !parent)
232 		return -ENOENT;
233 
234 	list_for_each_entry(list, &member->groups, next_group) {
235 		if (list->group == parent) {
236 			list_del(&list->next_group);
237 			list_del(&list->next_member);
238 			kfree(list);
239 			return 0;
240 		}
241 	}
242 	return -ENOENT;
243 }
244 
245 /*
246  * The full config is read in one go, only called from open_ctree()
247  * It doesn't use any locking, as at this point we're still single-threaded
248  */
249 int btrfs_read_qgroup_config(struct btrfs_fs_info *fs_info)
250 {
251 	struct btrfs_key key;
252 	struct btrfs_key found_key;
253 	struct btrfs_root *quota_root = fs_info->quota_root;
254 	struct btrfs_path *path = NULL;
255 	struct extent_buffer *l;
256 	int slot;
257 	int ret = 0;
258 	u64 flags = 0;
259 	u64 rescan_progress = 0;
260 
261 	if (!fs_info->quota_enabled)
262 		return 0;
263 
264 	fs_info->qgroup_ulist = ulist_alloc(GFP_NOFS);
265 	if (!fs_info->qgroup_ulist) {
266 		ret = -ENOMEM;
267 		goto out;
268 	}
269 
270 	path = btrfs_alloc_path();
271 	if (!path) {
272 		ret = -ENOMEM;
273 		goto out;
274 	}
275 
276 	/* default this to quota off, in case no status key is found */
277 	fs_info->qgroup_flags = 0;
278 
279 	/*
280 	 * pass 1: read status, all qgroup infos and limits
281 	 */
282 	key.objectid = 0;
283 	key.type = 0;
284 	key.offset = 0;
285 	ret = btrfs_search_slot_for_read(quota_root, &key, path, 1, 1);
286 	if (ret)
287 		goto out;
288 
289 	while (1) {
290 		struct btrfs_qgroup *qgroup;
291 
292 		slot = path->slots[0];
293 		l = path->nodes[0];
294 		btrfs_item_key_to_cpu(l, &found_key, slot);
295 
296 		if (found_key.type == BTRFS_QGROUP_STATUS_KEY) {
297 			struct btrfs_qgroup_status_item *ptr;
298 
299 			ptr = btrfs_item_ptr(l, slot,
300 					     struct btrfs_qgroup_status_item);
301 
302 			if (btrfs_qgroup_status_version(l, ptr) !=
303 			    BTRFS_QGROUP_STATUS_VERSION) {
304 				btrfs_err(fs_info,
305 				 "old qgroup version, quota disabled");
306 				goto out;
307 			}
308 			if (btrfs_qgroup_status_generation(l, ptr) !=
309 			    fs_info->generation) {
310 				flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT;
311 				btrfs_err(fs_info,
312 					"qgroup generation mismatch, "
313 					"marked as inconsistent");
314 			}
315 			fs_info->qgroup_flags = btrfs_qgroup_status_flags(l,
316 									  ptr);
317 			rescan_progress = btrfs_qgroup_status_rescan(l, ptr);
318 			goto next1;
319 		}
320 
321 		if (found_key.type != BTRFS_QGROUP_INFO_KEY &&
322 		    found_key.type != BTRFS_QGROUP_LIMIT_KEY)
323 			goto next1;
324 
325 		qgroup = find_qgroup_rb(fs_info, found_key.offset);
326 		if ((qgroup && found_key.type == BTRFS_QGROUP_INFO_KEY) ||
327 		    (!qgroup && found_key.type == BTRFS_QGROUP_LIMIT_KEY)) {
328 			btrfs_err(fs_info, "inconsitent qgroup config");
329 			flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT;
330 		}
331 		if (!qgroup) {
332 			qgroup = add_qgroup_rb(fs_info, found_key.offset);
333 			if (IS_ERR(qgroup)) {
334 				ret = PTR_ERR(qgroup);
335 				goto out;
336 			}
337 		}
338 		switch (found_key.type) {
339 		case BTRFS_QGROUP_INFO_KEY: {
340 			struct btrfs_qgroup_info_item *ptr;
341 
342 			ptr = btrfs_item_ptr(l, slot,
343 					     struct btrfs_qgroup_info_item);
344 			qgroup->rfer = btrfs_qgroup_info_rfer(l, ptr);
345 			qgroup->rfer_cmpr = btrfs_qgroup_info_rfer_cmpr(l, ptr);
346 			qgroup->excl = btrfs_qgroup_info_excl(l, ptr);
347 			qgroup->excl_cmpr = btrfs_qgroup_info_excl_cmpr(l, ptr);
348 			/* generation currently unused */
349 			break;
350 		}
351 		case BTRFS_QGROUP_LIMIT_KEY: {
352 			struct btrfs_qgroup_limit_item *ptr;
353 
354 			ptr = btrfs_item_ptr(l, slot,
355 					     struct btrfs_qgroup_limit_item);
356 			qgroup->lim_flags = btrfs_qgroup_limit_flags(l, ptr);
357 			qgroup->max_rfer = btrfs_qgroup_limit_max_rfer(l, ptr);
358 			qgroup->max_excl = btrfs_qgroup_limit_max_excl(l, ptr);
359 			qgroup->rsv_rfer = btrfs_qgroup_limit_rsv_rfer(l, ptr);
360 			qgroup->rsv_excl = btrfs_qgroup_limit_rsv_excl(l, ptr);
361 			break;
362 		}
363 		}
364 next1:
365 		ret = btrfs_next_item(quota_root, path);
366 		if (ret < 0)
367 			goto out;
368 		if (ret)
369 			break;
370 	}
371 	btrfs_release_path(path);
372 
373 	/*
374 	 * pass 2: read all qgroup relations
375 	 */
376 	key.objectid = 0;
377 	key.type = BTRFS_QGROUP_RELATION_KEY;
378 	key.offset = 0;
379 	ret = btrfs_search_slot_for_read(quota_root, &key, path, 1, 0);
380 	if (ret)
381 		goto out;
382 	while (1) {
383 		slot = path->slots[0];
384 		l = path->nodes[0];
385 		btrfs_item_key_to_cpu(l, &found_key, slot);
386 
387 		if (found_key.type != BTRFS_QGROUP_RELATION_KEY)
388 			goto next2;
389 
390 		if (found_key.objectid > found_key.offset) {
391 			/* parent <- member, not needed to build config */
392 			/* FIXME should we omit the key completely? */
393 			goto next2;
394 		}
395 
396 		ret = add_relation_rb(fs_info, found_key.objectid,
397 				      found_key.offset);
398 		if (ret == -ENOENT) {
399 			btrfs_warn(fs_info,
400 				"orphan qgroup relation 0x%llx->0x%llx",
401 				found_key.objectid, found_key.offset);
402 			ret = 0;	/* ignore the error */
403 		}
404 		if (ret)
405 			goto out;
406 next2:
407 		ret = btrfs_next_item(quota_root, path);
408 		if (ret < 0)
409 			goto out;
410 		if (ret)
411 			break;
412 	}
413 out:
414 	fs_info->qgroup_flags |= flags;
415 	if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON)) {
416 		fs_info->quota_enabled = 0;
417 		fs_info->pending_quota_state = 0;
418 	} else if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN &&
419 		   ret >= 0) {
420 		ret = qgroup_rescan_init(fs_info, rescan_progress, 0);
421 	}
422 	btrfs_free_path(path);
423 
424 	if (ret < 0) {
425 		ulist_free(fs_info->qgroup_ulist);
426 		fs_info->qgroup_ulist = NULL;
427 		fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_RESCAN;
428 	}
429 
430 	return ret < 0 ? ret : 0;
431 }
432 
433 /*
434  * This is called from close_ctree() or open_ctree() or btrfs_quota_disable(),
435  * first two are in single-threaded paths.And for the third one, we have set
436  * quota_root to be null with qgroup_lock held before, so it is safe to clean
437  * up the in-memory structures without qgroup_lock held.
438  */
439 void btrfs_free_qgroup_config(struct btrfs_fs_info *fs_info)
440 {
441 	struct rb_node *n;
442 	struct btrfs_qgroup *qgroup;
443 
444 	while ((n = rb_first(&fs_info->qgroup_tree))) {
445 		qgroup = rb_entry(n, struct btrfs_qgroup, node);
446 		rb_erase(n, &fs_info->qgroup_tree);
447 		__del_qgroup_rb(qgroup);
448 	}
449 	/*
450 	 * we call btrfs_free_qgroup_config() when umounting
451 	 * filesystem and disabling quota, so we set qgroup_ulit
452 	 * to be null here to avoid double free.
453 	 */
454 	ulist_free(fs_info->qgroup_ulist);
455 	fs_info->qgroup_ulist = NULL;
456 }
457 
458 static int add_qgroup_relation_item(struct btrfs_trans_handle *trans,
459 				    struct btrfs_root *quota_root,
460 				    u64 src, u64 dst)
461 {
462 	int ret;
463 	struct btrfs_path *path;
464 	struct btrfs_key key;
465 
466 	path = btrfs_alloc_path();
467 	if (!path)
468 		return -ENOMEM;
469 
470 	key.objectid = src;
471 	key.type = BTRFS_QGROUP_RELATION_KEY;
472 	key.offset = dst;
473 
474 	ret = btrfs_insert_empty_item(trans, quota_root, path, &key, 0);
475 
476 	btrfs_mark_buffer_dirty(path->nodes[0]);
477 
478 	btrfs_free_path(path);
479 	return ret;
480 }
481 
482 static int del_qgroup_relation_item(struct btrfs_trans_handle *trans,
483 				    struct btrfs_root *quota_root,
484 				    u64 src, u64 dst)
485 {
486 	int ret;
487 	struct btrfs_path *path;
488 	struct btrfs_key key;
489 
490 	path = btrfs_alloc_path();
491 	if (!path)
492 		return -ENOMEM;
493 
494 	key.objectid = src;
495 	key.type = BTRFS_QGROUP_RELATION_KEY;
496 	key.offset = dst;
497 
498 	ret = btrfs_search_slot(trans, quota_root, &key, path, -1, 1);
499 	if (ret < 0)
500 		goto out;
501 
502 	if (ret > 0) {
503 		ret = -ENOENT;
504 		goto out;
505 	}
506 
507 	ret = btrfs_del_item(trans, quota_root, path);
508 out:
509 	btrfs_free_path(path);
510 	return ret;
511 }
512 
513 static int add_qgroup_item(struct btrfs_trans_handle *trans,
514 			   struct btrfs_root *quota_root, u64 qgroupid)
515 {
516 	int ret;
517 	struct btrfs_path *path;
518 	struct btrfs_qgroup_info_item *qgroup_info;
519 	struct btrfs_qgroup_limit_item *qgroup_limit;
520 	struct extent_buffer *leaf;
521 	struct btrfs_key key;
522 
523 	path = btrfs_alloc_path();
524 	if (!path)
525 		return -ENOMEM;
526 
527 	key.objectid = 0;
528 	key.type = BTRFS_QGROUP_INFO_KEY;
529 	key.offset = qgroupid;
530 
531 	ret = btrfs_insert_empty_item(trans, quota_root, path, &key,
532 				      sizeof(*qgroup_info));
533 	if (ret)
534 		goto out;
535 
536 	leaf = path->nodes[0];
537 	qgroup_info = btrfs_item_ptr(leaf, path->slots[0],
538 				 struct btrfs_qgroup_info_item);
539 	btrfs_set_qgroup_info_generation(leaf, qgroup_info, trans->transid);
540 	btrfs_set_qgroup_info_rfer(leaf, qgroup_info, 0);
541 	btrfs_set_qgroup_info_rfer_cmpr(leaf, qgroup_info, 0);
542 	btrfs_set_qgroup_info_excl(leaf, qgroup_info, 0);
543 	btrfs_set_qgroup_info_excl_cmpr(leaf, qgroup_info, 0);
544 
545 	btrfs_mark_buffer_dirty(leaf);
546 
547 	btrfs_release_path(path);
548 
549 	key.type = BTRFS_QGROUP_LIMIT_KEY;
550 	ret = btrfs_insert_empty_item(trans, quota_root, path, &key,
551 				      sizeof(*qgroup_limit));
552 	if (ret)
553 		goto out;
554 
555 	leaf = path->nodes[0];
556 	qgroup_limit = btrfs_item_ptr(leaf, path->slots[0],
557 				  struct btrfs_qgroup_limit_item);
558 	btrfs_set_qgroup_limit_flags(leaf, qgroup_limit, 0);
559 	btrfs_set_qgroup_limit_max_rfer(leaf, qgroup_limit, 0);
560 	btrfs_set_qgroup_limit_max_excl(leaf, qgroup_limit, 0);
561 	btrfs_set_qgroup_limit_rsv_rfer(leaf, qgroup_limit, 0);
562 	btrfs_set_qgroup_limit_rsv_excl(leaf, qgroup_limit, 0);
563 
564 	btrfs_mark_buffer_dirty(leaf);
565 
566 	ret = 0;
567 out:
568 	btrfs_free_path(path);
569 	return ret;
570 }
571 
572 static int del_qgroup_item(struct btrfs_trans_handle *trans,
573 			   struct btrfs_root *quota_root, u64 qgroupid)
574 {
575 	int ret;
576 	struct btrfs_path *path;
577 	struct btrfs_key key;
578 
579 	path = btrfs_alloc_path();
580 	if (!path)
581 		return -ENOMEM;
582 
583 	key.objectid = 0;
584 	key.type = BTRFS_QGROUP_INFO_KEY;
585 	key.offset = qgroupid;
586 	ret = btrfs_search_slot(trans, quota_root, &key, path, -1, 1);
587 	if (ret < 0)
588 		goto out;
589 
590 	if (ret > 0) {
591 		ret = -ENOENT;
592 		goto out;
593 	}
594 
595 	ret = btrfs_del_item(trans, quota_root, path);
596 	if (ret)
597 		goto out;
598 
599 	btrfs_release_path(path);
600 
601 	key.type = BTRFS_QGROUP_LIMIT_KEY;
602 	ret = btrfs_search_slot(trans, quota_root, &key, path, -1, 1);
603 	if (ret < 0)
604 		goto out;
605 
606 	if (ret > 0) {
607 		ret = -ENOENT;
608 		goto out;
609 	}
610 
611 	ret = btrfs_del_item(trans, quota_root, path);
612 
613 out:
614 	btrfs_free_path(path);
615 	return ret;
616 }
617 
618 static int update_qgroup_limit_item(struct btrfs_trans_handle *trans,
619 				    struct btrfs_root *root, u64 qgroupid,
620 				    u64 flags, u64 max_rfer, u64 max_excl,
621 				    u64 rsv_rfer, u64 rsv_excl)
622 {
623 	struct btrfs_path *path;
624 	struct btrfs_key key;
625 	struct extent_buffer *l;
626 	struct btrfs_qgroup_limit_item *qgroup_limit;
627 	int ret;
628 	int slot;
629 
630 	key.objectid = 0;
631 	key.type = BTRFS_QGROUP_LIMIT_KEY;
632 	key.offset = qgroupid;
633 
634 	path = btrfs_alloc_path();
635 	if (!path)
636 		return -ENOMEM;
637 
638 	ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
639 	if (ret > 0)
640 		ret = -ENOENT;
641 
642 	if (ret)
643 		goto out;
644 
645 	l = path->nodes[0];
646 	slot = path->slots[0];
647 	qgroup_limit = btrfs_item_ptr(l, slot, struct btrfs_qgroup_limit_item);
648 	btrfs_set_qgroup_limit_flags(l, qgroup_limit, flags);
649 	btrfs_set_qgroup_limit_max_rfer(l, qgroup_limit, max_rfer);
650 	btrfs_set_qgroup_limit_max_excl(l, qgroup_limit, max_excl);
651 	btrfs_set_qgroup_limit_rsv_rfer(l, qgroup_limit, rsv_rfer);
652 	btrfs_set_qgroup_limit_rsv_excl(l, qgroup_limit, rsv_excl);
653 
654 	btrfs_mark_buffer_dirty(l);
655 
656 out:
657 	btrfs_free_path(path);
658 	return ret;
659 }
660 
661 static int update_qgroup_info_item(struct btrfs_trans_handle *trans,
662 				   struct btrfs_root *root,
663 				   struct btrfs_qgroup *qgroup)
664 {
665 	struct btrfs_path *path;
666 	struct btrfs_key key;
667 	struct extent_buffer *l;
668 	struct btrfs_qgroup_info_item *qgroup_info;
669 	int ret;
670 	int slot;
671 
672 	key.objectid = 0;
673 	key.type = BTRFS_QGROUP_INFO_KEY;
674 	key.offset = qgroup->qgroupid;
675 
676 	path = btrfs_alloc_path();
677 	if (!path)
678 		return -ENOMEM;
679 
680 	ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
681 	if (ret > 0)
682 		ret = -ENOENT;
683 
684 	if (ret)
685 		goto out;
686 
687 	l = path->nodes[0];
688 	slot = path->slots[0];
689 	qgroup_info = btrfs_item_ptr(l, slot, struct btrfs_qgroup_info_item);
690 	btrfs_set_qgroup_info_generation(l, qgroup_info, trans->transid);
691 	btrfs_set_qgroup_info_rfer(l, qgroup_info, qgroup->rfer);
692 	btrfs_set_qgroup_info_rfer_cmpr(l, qgroup_info, qgroup->rfer_cmpr);
693 	btrfs_set_qgroup_info_excl(l, qgroup_info, qgroup->excl);
694 	btrfs_set_qgroup_info_excl_cmpr(l, qgroup_info, qgroup->excl_cmpr);
695 
696 	btrfs_mark_buffer_dirty(l);
697 
698 out:
699 	btrfs_free_path(path);
700 	return ret;
701 }
702 
703 static int update_qgroup_status_item(struct btrfs_trans_handle *trans,
704 				     struct btrfs_fs_info *fs_info,
705 				    struct btrfs_root *root)
706 {
707 	struct btrfs_path *path;
708 	struct btrfs_key key;
709 	struct extent_buffer *l;
710 	struct btrfs_qgroup_status_item *ptr;
711 	int ret;
712 	int slot;
713 
714 	key.objectid = 0;
715 	key.type = BTRFS_QGROUP_STATUS_KEY;
716 	key.offset = 0;
717 
718 	path = btrfs_alloc_path();
719 	if (!path)
720 		return -ENOMEM;
721 
722 	ret = btrfs_search_slot(trans, root, &key, path, 0, 1);
723 	if (ret > 0)
724 		ret = -ENOENT;
725 
726 	if (ret)
727 		goto out;
728 
729 	l = path->nodes[0];
730 	slot = path->slots[0];
731 	ptr = btrfs_item_ptr(l, slot, struct btrfs_qgroup_status_item);
732 	btrfs_set_qgroup_status_flags(l, ptr, fs_info->qgroup_flags);
733 	btrfs_set_qgroup_status_generation(l, ptr, trans->transid);
734 	btrfs_set_qgroup_status_rescan(l, ptr,
735 				fs_info->qgroup_rescan_progress.objectid);
736 
737 	btrfs_mark_buffer_dirty(l);
738 
739 out:
740 	btrfs_free_path(path);
741 	return ret;
742 }
743 
744 /*
745  * called with qgroup_lock held
746  */
747 static int btrfs_clean_quota_tree(struct btrfs_trans_handle *trans,
748 				  struct btrfs_root *root)
749 {
750 	struct btrfs_path *path;
751 	struct btrfs_key key;
752 	struct extent_buffer *leaf = NULL;
753 	int ret;
754 	int nr = 0;
755 
756 	path = btrfs_alloc_path();
757 	if (!path)
758 		return -ENOMEM;
759 
760 	path->leave_spinning = 1;
761 
762 	key.objectid = 0;
763 	key.offset = 0;
764 	key.type = 0;
765 
766 	while (1) {
767 		ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
768 		if (ret < 0)
769 			goto out;
770 		leaf = path->nodes[0];
771 		nr = btrfs_header_nritems(leaf);
772 		if (!nr)
773 			break;
774 		/*
775 		 * delete the leaf one by one
776 		 * since the whole tree is going
777 		 * to be deleted.
778 		 */
779 		path->slots[0] = 0;
780 		ret = btrfs_del_items(trans, root, path, 0, nr);
781 		if (ret)
782 			goto out;
783 
784 		btrfs_release_path(path);
785 	}
786 	ret = 0;
787 out:
788 	root->fs_info->pending_quota_state = 0;
789 	btrfs_free_path(path);
790 	return ret;
791 }
792 
793 int btrfs_quota_enable(struct btrfs_trans_handle *trans,
794 		       struct btrfs_fs_info *fs_info)
795 {
796 	struct btrfs_root *quota_root;
797 	struct btrfs_root *tree_root = fs_info->tree_root;
798 	struct btrfs_path *path = NULL;
799 	struct btrfs_qgroup_status_item *ptr;
800 	struct extent_buffer *leaf;
801 	struct btrfs_key key;
802 	struct btrfs_key found_key;
803 	struct btrfs_qgroup *qgroup = NULL;
804 	int ret = 0;
805 	int slot;
806 
807 	mutex_lock(&fs_info->qgroup_ioctl_lock);
808 	if (fs_info->quota_root) {
809 		fs_info->pending_quota_state = 1;
810 		goto out;
811 	}
812 
813 	fs_info->qgroup_ulist = ulist_alloc(GFP_NOFS);
814 	if (!fs_info->qgroup_ulist) {
815 		ret = -ENOMEM;
816 		goto out;
817 	}
818 
819 	/*
820 	 * initially create the quota tree
821 	 */
822 	quota_root = btrfs_create_tree(trans, fs_info,
823 				       BTRFS_QUOTA_TREE_OBJECTID);
824 	if (IS_ERR(quota_root)) {
825 		ret =  PTR_ERR(quota_root);
826 		goto out;
827 	}
828 
829 	path = btrfs_alloc_path();
830 	if (!path) {
831 		ret = -ENOMEM;
832 		goto out_free_root;
833 	}
834 
835 	key.objectid = 0;
836 	key.type = BTRFS_QGROUP_STATUS_KEY;
837 	key.offset = 0;
838 
839 	ret = btrfs_insert_empty_item(trans, quota_root, path, &key,
840 				      sizeof(*ptr));
841 	if (ret)
842 		goto out_free_path;
843 
844 	leaf = path->nodes[0];
845 	ptr = btrfs_item_ptr(leaf, path->slots[0],
846 				 struct btrfs_qgroup_status_item);
847 	btrfs_set_qgroup_status_generation(leaf, ptr, trans->transid);
848 	btrfs_set_qgroup_status_version(leaf, ptr, BTRFS_QGROUP_STATUS_VERSION);
849 	fs_info->qgroup_flags = BTRFS_QGROUP_STATUS_FLAG_ON |
850 				BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT;
851 	btrfs_set_qgroup_status_flags(leaf, ptr, fs_info->qgroup_flags);
852 	btrfs_set_qgroup_status_rescan(leaf, ptr, 0);
853 
854 	btrfs_mark_buffer_dirty(leaf);
855 
856 	key.objectid = 0;
857 	key.type = BTRFS_ROOT_REF_KEY;
858 	key.offset = 0;
859 
860 	btrfs_release_path(path);
861 	ret = btrfs_search_slot_for_read(tree_root, &key, path, 1, 0);
862 	if (ret > 0)
863 		goto out_add_root;
864 	if (ret < 0)
865 		goto out_free_path;
866 
867 
868 	while (1) {
869 		slot = path->slots[0];
870 		leaf = path->nodes[0];
871 		btrfs_item_key_to_cpu(leaf, &found_key, slot);
872 
873 		if (found_key.type == BTRFS_ROOT_REF_KEY) {
874 			ret = add_qgroup_item(trans, quota_root,
875 					      found_key.offset);
876 			if (ret)
877 				goto out_free_path;
878 
879 			qgroup = add_qgroup_rb(fs_info, found_key.offset);
880 			if (IS_ERR(qgroup)) {
881 				ret = PTR_ERR(qgroup);
882 				goto out_free_path;
883 			}
884 		}
885 		ret = btrfs_next_item(tree_root, path);
886 		if (ret < 0)
887 			goto out_free_path;
888 		if (ret)
889 			break;
890 	}
891 
892 out_add_root:
893 	btrfs_release_path(path);
894 	ret = add_qgroup_item(trans, quota_root, BTRFS_FS_TREE_OBJECTID);
895 	if (ret)
896 		goto out_free_path;
897 
898 	qgroup = add_qgroup_rb(fs_info, BTRFS_FS_TREE_OBJECTID);
899 	if (IS_ERR(qgroup)) {
900 		ret = PTR_ERR(qgroup);
901 		goto out_free_path;
902 	}
903 	spin_lock(&fs_info->qgroup_lock);
904 	fs_info->quota_root = quota_root;
905 	fs_info->pending_quota_state = 1;
906 	spin_unlock(&fs_info->qgroup_lock);
907 out_free_path:
908 	btrfs_free_path(path);
909 out_free_root:
910 	if (ret) {
911 		free_extent_buffer(quota_root->node);
912 		free_extent_buffer(quota_root->commit_root);
913 		kfree(quota_root);
914 	}
915 out:
916 	if (ret) {
917 		ulist_free(fs_info->qgroup_ulist);
918 		fs_info->qgroup_ulist = NULL;
919 	}
920 	mutex_unlock(&fs_info->qgroup_ioctl_lock);
921 	return ret;
922 }
923 
924 int btrfs_quota_disable(struct btrfs_trans_handle *trans,
925 			struct btrfs_fs_info *fs_info)
926 {
927 	struct btrfs_root *tree_root = fs_info->tree_root;
928 	struct btrfs_root *quota_root;
929 	int ret = 0;
930 
931 	mutex_lock(&fs_info->qgroup_ioctl_lock);
932 	if (!fs_info->quota_root)
933 		goto out;
934 	spin_lock(&fs_info->qgroup_lock);
935 	fs_info->quota_enabled = 0;
936 	fs_info->pending_quota_state = 0;
937 	quota_root = fs_info->quota_root;
938 	fs_info->quota_root = NULL;
939 	spin_unlock(&fs_info->qgroup_lock);
940 
941 	btrfs_free_qgroup_config(fs_info);
942 
943 	ret = btrfs_clean_quota_tree(trans, quota_root);
944 	if (ret)
945 		goto out;
946 
947 	ret = btrfs_del_root(trans, tree_root, &quota_root->root_key);
948 	if (ret)
949 		goto out;
950 
951 	list_del(&quota_root->dirty_list);
952 
953 	btrfs_tree_lock(quota_root->node);
954 	clean_tree_block(trans, tree_root, quota_root->node);
955 	btrfs_tree_unlock(quota_root->node);
956 	btrfs_free_tree_block(trans, quota_root, quota_root->node, 0, 1);
957 
958 	free_extent_buffer(quota_root->node);
959 	free_extent_buffer(quota_root->commit_root);
960 	kfree(quota_root);
961 out:
962 	mutex_unlock(&fs_info->qgroup_ioctl_lock);
963 	return ret;
964 }
965 
966 static void qgroup_dirty(struct btrfs_fs_info *fs_info,
967 			 struct btrfs_qgroup *qgroup)
968 {
969 	if (list_empty(&qgroup->dirty))
970 		list_add(&qgroup->dirty, &fs_info->dirty_qgroups);
971 }
972 
973 int btrfs_add_qgroup_relation(struct btrfs_trans_handle *trans,
974 			      struct btrfs_fs_info *fs_info, u64 src, u64 dst)
975 {
976 	struct btrfs_root *quota_root;
977 	struct btrfs_qgroup *parent;
978 	struct btrfs_qgroup *member;
979 	struct btrfs_qgroup_list *list;
980 	int ret = 0;
981 
982 	mutex_lock(&fs_info->qgroup_ioctl_lock);
983 	quota_root = fs_info->quota_root;
984 	if (!quota_root) {
985 		ret = -EINVAL;
986 		goto out;
987 	}
988 	member = find_qgroup_rb(fs_info, src);
989 	parent = find_qgroup_rb(fs_info, dst);
990 	if (!member || !parent) {
991 		ret = -EINVAL;
992 		goto out;
993 	}
994 
995 	/* check if such qgroup relation exist firstly */
996 	list_for_each_entry(list, &member->groups, next_group) {
997 		if (list->group == parent) {
998 			ret = -EEXIST;
999 			goto out;
1000 		}
1001 	}
1002 
1003 	ret = add_qgroup_relation_item(trans, quota_root, src, dst);
1004 	if (ret)
1005 		goto out;
1006 
1007 	ret = add_qgroup_relation_item(trans, quota_root, dst, src);
1008 	if (ret) {
1009 		del_qgroup_relation_item(trans, quota_root, src, dst);
1010 		goto out;
1011 	}
1012 
1013 	spin_lock(&fs_info->qgroup_lock);
1014 	ret = add_relation_rb(quota_root->fs_info, src, dst);
1015 	spin_unlock(&fs_info->qgroup_lock);
1016 out:
1017 	mutex_unlock(&fs_info->qgroup_ioctl_lock);
1018 	return ret;
1019 }
1020 
1021 int btrfs_del_qgroup_relation(struct btrfs_trans_handle *trans,
1022 			      struct btrfs_fs_info *fs_info, u64 src, u64 dst)
1023 {
1024 	struct btrfs_root *quota_root;
1025 	struct btrfs_qgroup *parent;
1026 	struct btrfs_qgroup *member;
1027 	struct btrfs_qgroup_list *list;
1028 	int ret = 0;
1029 	int err;
1030 
1031 	mutex_lock(&fs_info->qgroup_ioctl_lock);
1032 	quota_root = fs_info->quota_root;
1033 	if (!quota_root) {
1034 		ret = -EINVAL;
1035 		goto out;
1036 	}
1037 
1038 	member = find_qgroup_rb(fs_info, src);
1039 	parent = find_qgroup_rb(fs_info, dst);
1040 	if (!member || !parent) {
1041 		ret = -EINVAL;
1042 		goto out;
1043 	}
1044 
1045 	/* check if such qgroup relation exist firstly */
1046 	list_for_each_entry(list, &member->groups, next_group) {
1047 		if (list->group == parent)
1048 			goto exist;
1049 	}
1050 	ret = -ENOENT;
1051 	goto out;
1052 exist:
1053 	ret = del_qgroup_relation_item(trans, quota_root, src, dst);
1054 	err = del_qgroup_relation_item(trans, quota_root, dst, src);
1055 	if (err && !ret)
1056 		ret = err;
1057 
1058 	spin_lock(&fs_info->qgroup_lock);
1059 	del_relation_rb(fs_info, src, dst);
1060 	spin_unlock(&fs_info->qgroup_lock);
1061 out:
1062 	mutex_unlock(&fs_info->qgroup_ioctl_lock);
1063 	return ret;
1064 }
1065 
1066 int btrfs_create_qgroup(struct btrfs_trans_handle *trans,
1067 			struct btrfs_fs_info *fs_info, u64 qgroupid, char *name)
1068 {
1069 	struct btrfs_root *quota_root;
1070 	struct btrfs_qgroup *qgroup;
1071 	int ret = 0;
1072 
1073 	mutex_lock(&fs_info->qgroup_ioctl_lock);
1074 	quota_root = fs_info->quota_root;
1075 	if (!quota_root) {
1076 		ret = -EINVAL;
1077 		goto out;
1078 	}
1079 	qgroup = find_qgroup_rb(fs_info, qgroupid);
1080 	if (qgroup) {
1081 		ret = -EEXIST;
1082 		goto out;
1083 	}
1084 
1085 	ret = add_qgroup_item(trans, quota_root, qgroupid);
1086 	if (ret)
1087 		goto out;
1088 
1089 	spin_lock(&fs_info->qgroup_lock);
1090 	qgroup = add_qgroup_rb(fs_info, qgroupid);
1091 	spin_unlock(&fs_info->qgroup_lock);
1092 
1093 	if (IS_ERR(qgroup))
1094 		ret = PTR_ERR(qgroup);
1095 out:
1096 	mutex_unlock(&fs_info->qgroup_ioctl_lock);
1097 	return ret;
1098 }
1099 
1100 int btrfs_remove_qgroup(struct btrfs_trans_handle *trans,
1101 			struct btrfs_fs_info *fs_info, u64 qgroupid)
1102 {
1103 	struct btrfs_root *quota_root;
1104 	struct btrfs_qgroup *qgroup;
1105 	int ret = 0;
1106 
1107 	mutex_lock(&fs_info->qgroup_ioctl_lock);
1108 	quota_root = fs_info->quota_root;
1109 	if (!quota_root) {
1110 		ret = -EINVAL;
1111 		goto out;
1112 	}
1113 
1114 	qgroup = find_qgroup_rb(fs_info, qgroupid);
1115 	if (!qgroup) {
1116 		ret = -ENOENT;
1117 		goto out;
1118 	} else {
1119 		/* check if there are no relations to this qgroup */
1120 		if (!list_empty(&qgroup->groups) ||
1121 		    !list_empty(&qgroup->members)) {
1122 			ret = -EBUSY;
1123 			goto out;
1124 		}
1125 	}
1126 	ret = del_qgroup_item(trans, quota_root, qgroupid);
1127 
1128 	spin_lock(&fs_info->qgroup_lock);
1129 	del_qgroup_rb(quota_root->fs_info, qgroupid);
1130 	spin_unlock(&fs_info->qgroup_lock);
1131 out:
1132 	mutex_unlock(&fs_info->qgroup_ioctl_lock);
1133 	return ret;
1134 }
1135 
1136 int btrfs_limit_qgroup(struct btrfs_trans_handle *trans,
1137 		       struct btrfs_fs_info *fs_info, u64 qgroupid,
1138 		       struct btrfs_qgroup_limit *limit)
1139 {
1140 	struct btrfs_root *quota_root;
1141 	struct btrfs_qgroup *qgroup;
1142 	int ret = 0;
1143 
1144 	mutex_lock(&fs_info->qgroup_ioctl_lock);
1145 	quota_root = fs_info->quota_root;
1146 	if (!quota_root) {
1147 		ret = -EINVAL;
1148 		goto out;
1149 	}
1150 
1151 	qgroup = find_qgroup_rb(fs_info, qgroupid);
1152 	if (!qgroup) {
1153 		ret = -ENOENT;
1154 		goto out;
1155 	}
1156 	ret = update_qgroup_limit_item(trans, quota_root, qgroupid,
1157 				       limit->flags, limit->max_rfer,
1158 				       limit->max_excl, limit->rsv_rfer,
1159 				       limit->rsv_excl);
1160 	if (ret) {
1161 		fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT;
1162 		btrfs_info(fs_info, "unable to update quota limit for %llu",
1163 		       qgroupid);
1164 	}
1165 
1166 	spin_lock(&fs_info->qgroup_lock);
1167 	qgroup->lim_flags = limit->flags;
1168 	qgroup->max_rfer = limit->max_rfer;
1169 	qgroup->max_excl = limit->max_excl;
1170 	qgroup->rsv_rfer = limit->rsv_rfer;
1171 	qgroup->rsv_excl = limit->rsv_excl;
1172 	spin_unlock(&fs_info->qgroup_lock);
1173 out:
1174 	mutex_unlock(&fs_info->qgroup_ioctl_lock);
1175 	return ret;
1176 }
1177 
1178 /*
1179  * btrfs_qgroup_record_ref is called when the ref is added or deleted. it puts
1180  * the modification into a list that's later used by btrfs_end_transaction to
1181  * pass the recorded modifications on to btrfs_qgroup_account_ref.
1182  */
1183 int btrfs_qgroup_record_ref(struct btrfs_trans_handle *trans,
1184 			    struct btrfs_delayed_ref_node *node,
1185 			    struct btrfs_delayed_extent_op *extent_op)
1186 {
1187 	struct qgroup_update *u;
1188 
1189 	BUG_ON(!trans->delayed_ref_elem.seq);
1190 	u = kmalloc(sizeof(*u), GFP_NOFS);
1191 	if (!u)
1192 		return -ENOMEM;
1193 
1194 	u->node = node;
1195 	u->extent_op = extent_op;
1196 	list_add_tail(&u->list, &trans->qgroup_ref_list);
1197 
1198 	return 0;
1199 }
1200 
1201 static int qgroup_account_ref_step1(struct btrfs_fs_info *fs_info,
1202 				    struct ulist *roots, struct ulist *tmp,
1203 				    u64 seq)
1204 {
1205 	struct ulist_node *unode;
1206 	struct ulist_iterator uiter;
1207 	struct ulist_node *tmp_unode;
1208 	struct ulist_iterator tmp_uiter;
1209 	struct btrfs_qgroup *qg;
1210 	int ret;
1211 
1212 	ULIST_ITER_INIT(&uiter);
1213 	while ((unode = ulist_next(roots, &uiter))) {
1214 		qg = find_qgroup_rb(fs_info, unode->val);
1215 		if (!qg)
1216 			continue;
1217 
1218 		ulist_reinit(tmp);
1219 						/* XXX id not needed */
1220 		ret = ulist_add(tmp, qg->qgroupid,
1221 				(u64)(uintptr_t)qg, GFP_ATOMIC);
1222 		if (ret < 0)
1223 			return ret;
1224 		ULIST_ITER_INIT(&tmp_uiter);
1225 		while ((tmp_unode = ulist_next(tmp, &tmp_uiter))) {
1226 			struct btrfs_qgroup_list *glist;
1227 
1228 			qg = (struct btrfs_qgroup *)(uintptr_t)tmp_unode->aux;
1229 			if (qg->refcnt < seq)
1230 				qg->refcnt = seq + 1;
1231 			else
1232 				++qg->refcnt;
1233 
1234 			list_for_each_entry(glist, &qg->groups, next_group) {
1235 				ret = ulist_add(tmp, glist->group->qgroupid,
1236 						(u64)(uintptr_t)glist->group,
1237 						GFP_ATOMIC);
1238 				if (ret < 0)
1239 					return ret;
1240 			}
1241 		}
1242 	}
1243 
1244 	return 0;
1245 }
1246 
1247 static int qgroup_account_ref_step2(struct btrfs_fs_info *fs_info,
1248 				    struct ulist *roots, struct ulist *tmp,
1249 				    u64 seq, int sgn, u64 num_bytes,
1250 				    struct btrfs_qgroup *qgroup)
1251 {
1252 	struct ulist_node *unode;
1253 	struct ulist_iterator uiter;
1254 	struct btrfs_qgroup *qg;
1255 	struct btrfs_qgroup_list *glist;
1256 	int ret;
1257 
1258 	ulist_reinit(tmp);
1259 	ret = ulist_add(tmp, qgroup->qgroupid, (uintptr_t)qgroup, GFP_ATOMIC);
1260 	if (ret < 0)
1261 		return ret;
1262 
1263 	ULIST_ITER_INIT(&uiter);
1264 	while ((unode = ulist_next(tmp, &uiter))) {
1265 		qg = (struct btrfs_qgroup *)(uintptr_t)unode->aux;
1266 		if (qg->refcnt < seq) {
1267 			/* not visited by step 1 */
1268 			qg->rfer += sgn * num_bytes;
1269 			qg->rfer_cmpr += sgn * num_bytes;
1270 			if (roots->nnodes == 0) {
1271 				qg->excl += sgn * num_bytes;
1272 				qg->excl_cmpr += sgn * num_bytes;
1273 			}
1274 			qgroup_dirty(fs_info, qg);
1275 		}
1276 		WARN_ON(qg->tag >= seq);
1277 		qg->tag = seq;
1278 
1279 		list_for_each_entry(glist, &qg->groups, next_group) {
1280 			ret = ulist_add(tmp, glist->group->qgroupid,
1281 					(uintptr_t)glist->group, GFP_ATOMIC);
1282 			if (ret < 0)
1283 				return ret;
1284 		}
1285 	}
1286 
1287 	return 0;
1288 }
1289 
1290 static int qgroup_account_ref_step3(struct btrfs_fs_info *fs_info,
1291 				    struct ulist *roots, struct ulist *tmp,
1292 				    u64 seq, int sgn, u64 num_bytes)
1293 {
1294 	struct ulist_node *unode;
1295 	struct ulist_iterator uiter;
1296 	struct btrfs_qgroup *qg;
1297 	struct ulist_node *tmp_unode;
1298 	struct ulist_iterator tmp_uiter;
1299 	int ret;
1300 
1301 	ULIST_ITER_INIT(&uiter);
1302 	while ((unode = ulist_next(roots, &uiter))) {
1303 		qg = find_qgroup_rb(fs_info, unode->val);
1304 		if (!qg)
1305 			continue;
1306 
1307 		ulist_reinit(tmp);
1308 		ret = ulist_add(tmp, qg->qgroupid, (uintptr_t)qg, GFP_ATOMIC);
1309 		if (ret < 0)
1310 			return ret;
1311 
1312 		ULIST_ITER_INIT(&tmp_uiter);
1313 		while ((tmp_unode = ulist_next(tmp, &tmp_uiter))) {
1314 			struct btrfs_qgroup_list *glist;
1315 
1316 			qg = (struct btrfs_qgroup *)(uintptr_t)tmp_unode->aux;
1317 			if (qg->tag == seq)
1318 				continue;
1319 
1320 			if (qg->refcnt - seq == roots->nnodes) {
1321 				qg->excl -= sgn * num_bytes;
1322 				qg->excl_cmpr -= sgn * num_bytes;
1323 				qgroup_dirty(fs_info, qg);
1324 			}
1325 
1326 			list_for_each_entry(glist, &qg->groups, next_group) {
1327 				ret = ulist_add(tmp, glist->group->qgroupid,
1328 						(uintptr_t)glist->group,
1329 						GFP_ATOMIC);
1330 				if (ret < 0)
1331 					return ret;
1332 			}
1333 		}
1334 	}
1335 
1336 	return 0;
1337 }
1338 
1339 /*
1340  * btrfs_qgroup_account_ref is called for every ref that is added to or deleted
1341  * from the fs. First, all roots referencing the extent are searched, and
1342  * then the space is accounted accordingly to the different roots. The
1343  * accounting algorithm works in 3 steps documented inline.
1344  */
1345 int btrfs_qgroup_account_ref(struct btrfs_trans_handle *trans,
1346 			     struct btrfs_fs_info *fs_info,
1347 			     struct btrfs_delayed_ref_node *node,
1348 			     struct btrfs_delayed_extent_op *extent_op)
1349 {
1350 	struct btrfs_root *quota_root;
1351 	u64 ref_root;
1352 	struct btrfs_qgroup *qgroup;
1353 	struct ulist *roots = NULL;
1354 	u64 seq;
1355 	int ret = 0;
1356 	int sgn;
1357 
1358 	if (!fs_info->quota_enabled)
1359 		return 0;
1360 
1361 	BUG_ON(!fs_info->quota_root);
1362 
1363 	if (node->type == BTRFS_TREE_BLOCK_REF_KEY ||
1364 	    node->type == BTRFS_SHARED_BLOCK_REF_KEY) {
1365 		struct btrfs_delayed_tree_ref *ref;
1366 		ref = btrfs_delayed_node_to_tree_ref(node);
1367 		ref_root = ref->root;
1368 	} else if (node->type == BTRFS_EXTENT_DATA_REF_KEY ||
1369 		   node->type == BTRFS_SHARED_DATA_REF_KEY) {
1370 		struct btrfs_delayed_data_ref *ref;
1371 		ref = btrfs_delayed_node_to_data_ref(node);
1372 		ref_root = ref->root;
1373 	} else {
1374 		BUG();
1375 	}
1376 
1377 	if (!is_fstree(ref_root)) {
1378 		/*
1379 		 * non-fs-trees are not being accounted
1380 		 */
1381 		return 0;
1382 	}
1383 
1384 	switch (node->action) {
1385 	case BTRFS_ADD_DELAYED_REF:
1386 	case BTRFS_ADD_DELAYED_EXTENT:
1387 		sgn = 1;
1388 		seq = btrfs_tree_mod_seq_prev(node->seq);
1389 		break;
1390 	case BTRFS_DROP_DELAYED_REF:
1391 		sgn = -1;
1392 		seq = node->seq;
1393 		break;
1394 	case BTRFS_UPDATE_DELAYED_HEAD:
1395 		return 0;
1396 	default:
1397 		BUG();
1398 	}
1399 
1400 	mutex_lock(&fs_info->qgroup_rescan_lock);
1401 	if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN) {
1402 		if (fs_info->qgroup_rescan_progress.objectid <= node->bytenr) {
1403 			mutex_unlock(&fs_info->qgroup_rescan_lock);
1404 			return 0;
1405 		}
1406 	}
1407 	mutex_unlock(&fs_info->qgroup_rescan_lock);
1408 
1409 	/*
1410 	 * the delayed ref sequence number we pass depends on the direction of
1411 	 * the operation. for add operations, we pass
1412 	 * tree_mod_log_prev_seq(node->seq) to skip
1413 	 * the delayed ref's current sequence number, because we need the state
1414 	 * of the tree before the add operation. for delete operations, we pass
1415 	 * (node->seq) to include the delayed ref's current sequence number,
1416 	 * because we need the state of the tree after the delete operation.
1417 	 */
1418 	ret = btrfs_find_all_roots(trans, fs_info, node->bytenr, seq, &roots);
1419 	if (ret < 0)
1420 		return ret;
1421 
1422 	spin_lock(&fs_info->qgroup_lock);
1423 
1424 	quota_root = fs_info->quota_root;
1425 	if (!quota_root)
1426 		goto unlock;
1427 
1428 	qgroup = find_qgroup_rb(fs_info, ref_root);
1429 	if (!qgroup)
1430 		goto unlock;
1431 
1432 	/*
1433 	 * step 1: for each old ref, visit all nodes once and inc refcnt
1434 	 */
1435 	ulist_reinit(fs_info->qgroup_ulist);
1436 	seq = fs_info->qgroup_seq;
1437 	fs_info->qgroup_seq += roots->nnodes + 1; /* max refcnt */
1438 
1439 	ret = qgroup_account_ref_step1(fs_info, roots, fs_info->qgroup_ulist,
1440 				       seq);
1441 	if (ret)
1442 		goto unlock;
1443 
1444 	/*
1445 	 * step 2: walk from the new root
1446 	 */
1447 	ret = qgroup_account_ref_step2(fs_info, roots, fs_info->qgroup_ulist,
1448 				       seq, sgn, node->num_bytes, qgroup);
1449 	if (ret)
1450 		goto unlock;
1451 
1452 	/*
1453 	 * step 3: walk again from old refs
1454 	 */
1455 	ret = qgroup_account_ref_step3(fs_info, roots, fs_info->qgroup_ulist,
1456 				       seq, sgn, node->num_bytes);
1457 	if (ret)
1458 		goto unlock;
1459 
1460 unlock:
1461 	spin_unlock(&fs_info->qgroup_lock);
1462 	ulist_free(roots);
1463 
1464 	return ret;
1465 }
1466 
1467 /*
1468  * called from commit_transaction. Writes all changed qgroups to disk.
1469  */
1470 int btrfs_run_qgroups(struct btrfs_trans_handle *trans,
1471 		      struct btrfs_fs_info *fs_info)
1472 {
1473 	struct btrfs_root *quota_root = fs_info->quota_root;
1474 	int ret = 0;
1475 	int start_rescan_worker = 0;
1476 
1477 	if (!quota_root)
1478 		goto out;
1479 
1480 	if (!fs_info->quota_enabled && fs_info->pending_quota_state)
1481 		start_rescan_worker = 1;
1482 
1483 	fs_info->quota_enabled = fs_info->pending_quota_state;
1484 
1485 	spin_lock(&fs_info->qgroup_lock);
1486 	while (!list_empty(&fs_info->dirty_qgroups)) {
1487 		struct btrfs_qgroup *qgroup;
1488 		qgroup = list_first_entry(&fs_info->dirty_qgroups,
1489 					  struct btrfs_qgroup, dirty);
1490 		list_del_init(&qgroup->dirty);
1491 		spin_unlock(&fs_info->qgroup_lock);
1492 		ret = update_qgroup_info_item(trans, quota_root, qgroup);
1493 		if (ret)
1494 			fs_info->qgroup_flags |=
1495 					BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT;
1496 		spin_lock(&fs_info->qgroup_lock);
1497 	}
1498 	if (fs_info->quota_enabled)
1499 		fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_ON;
1500 	else
1501 		fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_ON;
1502 	spin_unlock(&fs_info->qgroup_lock);
1503 
1504 	ret = update_qgroup_status_item(trans, fs_info, quota_root);
1505 	if (ret)
1506 		fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT;
1507 
1508 	if (!ret && start_rescan_worker) {
1509 		ret = qgroup_rescan_init(fs_info, 0, 1);
1510 		if (!ret) {
1511 			qgroup_rescan_zero_tracking(fs_info);
1512 			btrfs_queue_work(fs_info->qgroup_rescan_workers,
1513 					 &fs_info->qgroup_rescan_work);
1514 		}
1515 		ret = 0;
1516 	}
1517 
1518 out:
1519 
1520 	return ret;
1521 }
1522 
1523 /*
1524  * copy the acounting information between qgroups. This is necessary when a
1525  * snapshot or a subvolume is created
1526  */
1527 int btrfs_qgroup_inherit(struct btrfs_trans_handle *trans,
1528 			 struct btrfs_fs_info *fs_info, u64 srcid, u64 objectid,
1529 			 struct btrfs_qgroup_inherit *inherit)
1530 {
1531 	int ret = 0;
1532 	int i;
1533 	u64 *i_qgroups;
1534 	struct btrfs_root *quota_root = fs_info->quota_root;
1535 	struct btrfs_qgroup *srcgroup;
1536 	struct btrfs_qgroup *dstgroup;
1537 	u32 level_size = 0;
1538 	u64 nums;
1539 
1540 	mutex_lock(&fs_info->qgroup_ioctl_lock);
1541 	if (!fs_info->quota_enabled)
1542 		goto out;
1543 
1544 	if (!quota_root) {
1545 		ret = -EINVAL;
1546 		goto out;
1547 	}
1548 
1549 	if (inherit) {
1550 		i_qgroups = (u64 *)(inherit + 1);
1551 		nums = inherit->num_qgroups + 2 * inherit->num_ref_copies +
1552 		       2 * inherit->num_excl_copies;
1553 		for (i = 0; i < nums; ++i) {
1554 			srcgroup = find_qgroup_rb(fs_info, *i_qgroups);
1555 			if (!srcgroup) {
1556 				ret = -EINVAL;
1557 				goto out;
1558 			}
1559 			++i_qgroups;
1560 		}
1561 	}
1562 
1563 	/*
1564 	 * create a tracking group for the subvol itself
1565 	 */
1566 	ret = add_qgroup_item(trans, quota_root, objectid);
1567 	if (ret)
1568 		goto out;
1569 
1570 	if (inherit && inherit->flags & BTRFS_QGROUP_INHERIT_SET_LIMITS) {
1571 		ret = update_qgroup_limit_item(trans, quota_root, objectid,
1572 					       inherit->lim.flags,
1573 					       inherit->lim.max_rfer,
1574 					       inherit->lim.max_excl,
1575 					       inherit->lim.rsv_rfer,
1576 					       inherit->lim.rsv_excl);
1577 		if (ret)
1578 			goto out;
1579 	}
1580 
1581 	if (srcid) {
1582 		struct btrfs_root *srcroot;
1583 		struct btrfs_key srckey;
1584 		int srcroot_level;
1585 
1586 		srckey.objectid = srcid;
1587 		srckey.type = BTRFS_ROOT_ITEM_KEY;
1588 		srckey.offset = (u64)-1;
1589 		srcroot = btrfs_read_fs_root_no_name(fs_info, &srckey);
1590 		if (IS_ERR(srcroot)) {
1591 			ret = PTR_ERR(srcroot);
1592 			goto out;
1593 		}
1594 
1595 		rcu_read_lock();
1596 		srcroot_level = btrfs_header_level(srcroot->node);
1597 		level_size = btrfs_level_size(srcroot, srcroot_level);
1598 		rcu_read_unlock();
1599 	}
1600 
1601 	/*
1602 	 * add qgroup to all inherited groups
1603 	 */
1604 	if (inherit) {
1605 		i_qgroups = (u64 *)(inherit + 1);
1606 		for (i = 0; i < inherit->num_qgroups; ++i) {
1607 			ret = add_qgroup_relation_item(trans, quota_root,
1608 						       objectid, *i_qgroups);
1609 			if (ret)
1610 				goto out;
1611 			ret = add_qgroup_relation_item(trans, quota_root,
1612 						       *i_qgroups, objectid);
1613 			if (ret)
1614 				goto out;
1615 			++i_qgroups;
1616 		}
1617 	}
1618 
1619 
1620 	spin_lock(&fs_info->qgroup_lock);
1621 
1622 	dstgroup = add_qgroup_rb(fs_info, objectid);
1623 	if (IS_ERR(dstgroup)) {
1624 		ret = PTR_ERR(dstgroup);
1625 		goto unlock;
1626 	}
1627 
1628 	if (srcid) {
1629 		srcgroup = find_qgroup_rb(fs_info, srcid);
1630 		if (!srcgroup)
1631 			goto unlock;
1632 		dstgroup->rfer = srcgroup->rfer - level_size;
1633 		dstgroup->rfer_cmpr = srcgroup->rfer_cmpr - level_size;
1634 		srcgroup->excl = level_size;
1635 		srcgroup->excl_cmpr = level_size;
1636 		qgroup_dirty(fs_info, dstgroup);
1637 		qgroup_dirty(fs_info, srcgroup);
1638 	}
1639 
1640 	if (!inherit)
1641 		goto unlock;
1642 
1643 	i_qgroups = (u64 *)(inherit + 1);
1644 	for (i = 0; i < inherit->num_qgroups; ++i) {
1645 		ret = add_relation_rb(quota_root->fs_info, objectid,
1646 				      *i_qgroups);
1647 		if (ret)
1648 			goto unlock;
1649 		++i_qgroups;
1650 	}
1651 
1652 	for (i = 0; i <  inherit->num_ref_copies; ++i) {
1653 		struct btrfs_qgroup *src;
1654 		struct btrfs_qgroup *dst;
1655 
1656 		src = find_qgroup_rb(fs_info, i_qgroups[0]);
1657 		dst = find_qgroup_rb(fs_info, i_qgroups[1]);
1658 
1659 		if (!src || !dst) {
1660 			ret = -EINVAL;
1661 			goto unlock;
1662 		}
1663 
1664 		dst->rfer = src->rfer - level_size;
1665 		dst->rfer_cmpr = src->rfer_cmpr - level_size;
1666 		i_qgroups += 2;
1667 	}
1668 	for (i = 0; i <  inherit->num_excl_copies; ++i) {
1669 		struct btrfs_qgroup *src;
1670 		struct btrfs_qgroup *dst;
1671 
1672 		src = find_qgroup_rb(fs_info, i_qgroups[0]);
1673 		dst = find_qgroup_rb(fs_info, i_qgroups[1]);
1674 
1675 		if (!src || !dst) {
1676 			ret = -EINVAL;
1677 			goto unlock;
1678 		}
1679 
1680 		dst->excl = src->excl + level_size;
1681 		dst->excl_cmpr = src->excl_cmpr + level_size;
1682 		i_qgroups += 2;
1683 	}
1684 
1685 unlock:
1686 	spin_unlock(&fs_info->qgroup_lock);
1687 out:
1688 	mutex_unlock(&fs_info->qgroup_ioctl_lock);
1689 	return ret;
1690 }
1691 
1692 /*
1693  * reserve some space for a qgroup and all its parents. The reservation takes
1694  * place with start_transaction or dealloc_reserve, similar to ENOSPC
1695  * accounting. If not enough space is available, EDQUOT is returned.
1696  * We assume that the requested space is new for all qgroups.
1697  */
1698 int btrfs_qgroup_reserve(struct btrfs_root *root, u64 num_bytes)
1699 {
1700 	struct btrfs_root *quota_root;
1701 	struct btrfs_qgroup *qgroup;
1702 	struct btrfs_fs_info *fs_info = root->fs_info;
1703 	u64 ref_root = root->root_key.objectid;
1704 	int ret = 0;
1705 	struct ulist_node *unode;
1706 	struct ulist_iterator uiter;
1707 
1708 	if (!is_fstree(ref_root))
1709 		return 0;
1710 
1711 	if (num_bytes == 0)
1712 		return 0;
1713 
1714 	spin_lock(&fs_info->qgroup_lock);
1715 	quota_root = fs_info->quota_root;
1716 	if (!quota_root)
1717 		goto out;
1718 
1719 	qgroup = find_qgroup_rb(fs_info, ref_root);
1720 	if (!qgroup)
1721 		goto out;
1722 
1723 	/*
1724 	 * in a first step, we check all affected qgroups if any limits would
1725 	 * be exceeded
1726 	 */
1727 	ulist_reinit(fs_info->qgroup_ulist);
1728 	ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid,
1729 			(uintptr_t)qgroup, GFP_ATOMIC);
1730 	if (ret < 0)
1731 		goto out;
1732 	ULIST_ITER_INIT(&uiter);
1733 	while ((unode = ulist_next(fs_info->qgroup_ulist, &uiter))) {
1734 		struct btrfs_qgroup *qg;
1735 		struct btrfs_qgroup_list *glist;
1736 
1737 		qg = (struct btrfs_qgroup *)(uintptr_t)unode->aux;
1738 
1739 		if ((qg->lim_flags & BTRFS_QGROUP_LIMIT_MAX_RFER) &&
1740 		    qg->reserved + (s64)qg->rfer + num_bytes >
1741 		    qg->max_rfer) {
1742 			ret = -EDQUOT;
1743 			goto out;
1744 		}
1745 
1746 		if ((qg->lim_flags & BTRFS_QGROUP_LIMIT_MAX_EXCL) &&
1747 		    qg->reserved + (s64)qg->excl + num_bytes >
1748 		    qg->max_excl) {
1749 			ret = -EDQUOT;
1750 			goto out;
1751 		}
1752 
1753 		list_for_each_entry(glist, &qg->groups, next_group) {
1754 			ret = ulist_add(fs_info->qgroup_ulist,
1755 					glist->group->qgroupid,
1756 					(uintptr_t)glist->group, GFP_ATOMIC);
1757 			if (ret < 0)
1758 				goto out;
1759 		}
1760 	}
1761 	ret = 0;
1762 	/*
1763 	 * no limits exceeded, now record the reservation into all qgroups
1764 	 */
1765 	ULIST_ITER_INIT(&uiter);
1766 	while ((unode = ulist_next(fs_info->qgroup_ulist, &uiter))) {
1767 		struct btrfs_qgroup *qg;
1768 
1769 		qg = (struct btrfs_qgroup *)(uintptr_t)unode->aux;
1770 
1771 		qg->reserved += num_bytes;
1772 	}
1773 
1774 out:
1775 	spin_unlock(&fs_info->qgroup_lock);
1776 	return ret;
1777 }
1778 
1779 void btrfs_qgroup_free(struct btrfs_root *root, u64 num_bytes)
1780 {
1781 	struct btrfs_root *quota_root;
1782 	struct btrfs_qgroup *qgroup;
1783 	struct btrfs_fs_info *fs_info = root->fs_info;
1784 	struct ulist_node *unode;
1785 	struct ulist_iterator uiter;
1786 	u64 ref_root = root->root_key.objectid;
1787 	int ret = 0;
1788 
1789 	if (!is_fstree(ref_root))
1790 		return;
1791 
1792 	if (num_bytes == 0)
1793 		return;
1794 
1795 	spin_lock(&fs_info->qgroup_lock);
1796 
1797 	quota_root = fs_info->quota_root;
1798 	if (!quota_root)
1799 		goto out;
1800 
1801 	qgroup = find_qgroup_rb(fs_info, ref_root);
1802 	if (!qgroup)
1803 		goto out;
1804 
1805 	ulist_reinit(fs_info->qgroup_ulist);
1806 	ret = ulist_add(fs_info->qgroup_ulist, qgroup->qgroupid,
1807 			(uintptr_t)qgroup, GFP_ATOMIC);
1808 	if (ret < 0)
1809 		goto out;
1810 	ULIST_ITER_INIT(&uiter);
1811 	while ((unode = ulist_next(fs_info->qgroup_ulist, &uiter))) {
1812 		struct btrfs_qgroup *qg;
1813 		struct btrfs_qgroup_list *glist;
1814 
1815 		qg = (struct btrfs_qgroup *)(uintptr_t)unode->aux;
1816 
1817 		qg->reserved -= num_bytes;
1818 
1819 		list_for_each_entry(glist, &qg->groups, next_group) {
1820 			ret = ulist_add(fs_info->qgroup_ulist,
1821 					glist->group->qgroupid,
1822 					(uintptr_t)glist->group, GFP_ATOMIC);
1823 			if (ret < 0)
1824 				goto out;
1825 		}
1826 	}
1827 
1828 out:
1829 	spin_unlock(&fs_info->qgroup_lock);
1830 }
1831 
1832 void assert_qgroups_uptodate(struct btrfs_trans_handle *trans)
1833 {
1834 	if (list_empty(&trans->qgroup_ref_list) && !trans->delayed_ref_elem.seq)
1835 		return;
1836 	btrfs_err(trans->root->fs_info,
1837 		"qgroups not uptodate in trans handle %p:  list is%s empty, "
1838 		"seq is %#x.%x",
1839 		trans, list_empty(&trans->qgroup_ref_list) ? "" : " not",
1840 		(u32)(trans->delayed_ref_elem.seq >> 32),
1841 		(u32)trans->delayed_ref_elem.seq);
1842 	BUG();
1843 }
1844 
1845 /*
1846  * returns < 0 on error, 0 when more leafs are to be scanned.
1847  * returns 1 when done, 2 when done and FLAG_INCONSISTENT was cleared.
1848  */
1849 static int
1850 qgroup_rescan_leaf(struct btrfs_fs_info *fs_info, struct btrfs_path *path,
1851 		   struct btrfs_trans_handle *trans, struct ulist *tmp,
1852 		   struct extent_buffer *scratch_leaf)
1853 {
1854 	struct btrfs_key found;
1855 	struct ulist *roots = NULL;
1856 	struct ulist_node *unode;
1857 	struct ulist_iterator uiter;
1858 	struct seq_list tree_mod_seq_elem = {};
1859 	u64 seq;
1860 	int slot;
1861 	int ret;
1862 
1863 	path->leave_spinning = 1;
1864 	mutex_lock(&fs_info->qgroup_rescan_lock);
1865 	ret = btrfs_search_slot_for_read(fs_info->extent_root,
1866 					 &fs_info->qgroup_rescan_progress,
1867 					 path, 1, 0);
1868 
1869 	pr_debug("current progress key (%llu %u %llu), search_slot ret %d\n",
1870 		 fs_info->qgroup_rescan_progress.objectid,
1871 		 fs_info->qgroup_rescan_progress.type,
1872 		 fs_info->qgroup_rescan_progress.offset, ret);
1873 
1874 	if (ret) {
1875 		/*
1876 		 * The rescan is about to end, we will not be scanning any
1877 		 * further blocks. We cannot unset the RESCAN flag here, because
1878 		 * we want to commit the transaction if everything went well.
1879 		 * To make the live accounting work in this phase, we set our
1880 		 * scan progress pointer such that every real extent objectid
1881 		 * will be smaller.
1882 		 */
1883 		fs_info->qgroup_rescan_progress.objectid = (u64)-1;
1884 		btrfs_release_path(path);
1885 		mutex_unlock(&fs_info->qgroup_rescan_lock);
1886 		return ret;
1887 	}
1888 
1889 	btrfs_item_key_to_cpu(path->nodes[0], &found,
1890 			      btrfs_header_nritems(path->nodes[0]) - 1);
1891 	fs_info->qgroup_rescan_progress.objectid = found.objectid + 1;
1892 
1893 	btrfs_get_tree_mod_seq(fs_info, &tree_mod_seq_elem);
1894 	memcpy(scratch_leaf, path->nodes[0], sizeof(*scratch_leaf));
1895 	slot = path->slots[0];
1896 	btrfs_release_path(path);
1897 	mutex_unlock(&fs_info->qgroup_rescan_lock);
1898 
1899 	for (; slot < btrfs_header_nritems(scratch_leaf); ++slot) {
1900 		u64 num_bytes;
1901 
1902 		btrfs_item_key_to_cpu(scratch_leaf, &found, slot);
1903 		if (found.type != BTRFS_EXTENT_ITEM_KEY &&
1904 		    found.type != BTRFS_METADATA_ITEM_KEY)
1905 			continue;
1906 		if (found.type == BTRFS_METADATA_ITEM_KEY)
1907 			num_bytes = fs_info->extent_root->leafsize;
1908 		else
1909 			num_bytes = found.offset;
1910 
1911 		ret = btrfs_find_all_roots(trans, fs_info, found.objectid,
1912 					   tree_mod_seq_elem.seq, &roots);
1913 		if (ret < 0)
1914 			goto out;
1915 		spin_lock(&fs_info->qgroup_lock);
1916 		seq = fs_info->qgroup_seq;
1917 		fs_info->qgroup_seq += roots->nnodes + 1; /* max refcnt */
1918 
1919 		ret = qgroup_account_ref_step1(fs_info, roots, tmp, seq);
1920 		if (ret) {
1921 			spin_unlock(&fs_info->qgroup_lock);
1922 			ulist_free(roots);
1923 			goto out;
1924 		}
1925 
1926 		/*
1927 		 * step2 of btrfs_qgroup_account_ref works from a single root,
1928 		 * we're doing all at once here.
1929 		 */
1930 		ulist_reinit(tmp);
1931 		ULIST_ITER_INIT(&uiter);
1932 		while ((unode = ulist_next(roots, &uiter))) {
1933 			struct btrfs_qgroup *qg;
1934 
1935 			qg = find_qgroup_rb(fs_info, unode->val);
1936 			if (!qg)
1937 				continue;
1938 
1939 			ret = ulist_add(tmp, qg->qgroupid, (uintptr_t)qg,
1940 					GFP_ATOMIC);
1941 			if (ret < 0) {
1942 				spin_unlock(&fs_info->qgroup_lock);
1943 				ulist_free(roots);
1944 				goto out;
1945 			}
1946 		}
1947 
1948 		/* this loop is similar to step 2 of btrfs_qgroup_account_ref */
1949 		ULIST_ITER_INIT(&uiter);
1950 		while ((unode = ulist_next(tmp, &uiter))) {
1951 			struct btrfs_qgroup *qg;
1952 			struct btrfs_qgroup_list *glist;
1953 
1954 			qg = (struct btrfs_qgroup *)(uintptr_t) unode->aux;
1955 			qg->rfer += num_bytes;
1956 			qg->rfer_cmpr += num_bytes;
1957 			WARN_ON(qg->tag >= seq);
1958 			if (qg->refcnt - seq == roots->nnodes) {
1959 				qg->excl += num_bytes;
1960 				qg->excl_cmpr += num_bytes;
1961 			}
1962 			qgroup_dirty(fs_info, qg);
1963 
1964 			list_for_each_entry(glist, &qg->groups, next_group) {
1965 				ret = ulist_add(tmp, glist->group->qgroupid,
1966 						(uintptr_t)glist->group,
1967 						GFP_ATOMIC);
1968 				if (ret < 0) {
1969 					spin_unlock(&fs_info->qgroup_lock);
1970 					ulist_free(roots);
1971 					goto out;
1972 				}
1973 			}
1974 		}
1975 
1976 		spin_unlock(&fs_info->qgroup_lock);
1977 		ulist_free(roots);
1978 		ret = 0;
1979 	}
1980 
1981 out:
1982 	btrfs_put_tree_mod_seq(fs_info, &tree_mod_seq_elem);
1983 
1984 	return ret;
1985 }
1986 
1987 static void btrfs_qgroup_rescan_worker(struct btrfs_work *work)
1988 {
1989 	struct btrfs_fs_info *fs_info = container_of(work, struct btrfs_fs_info,
1990 						     qgroup_rescan_work);
1991 	struct btrfs_path *path;
1992 	struct btrfs_trans_handle *trans = NULL;
1993 	struct ulist *tmp = NULL;
1994 	struct extent_buffer *scratch_leaf = NULL;
1995 	int err = -ENOMEM;
1996 
1997 	path = btrfs_alloc_path();
1998 	if (!path)
1999 		goto out;
2000 	tmp = ulist_alloc(GFP_NOFS);
2001 	if (!tmp)
2002 		goto out;
2003 	scratch_leaf = kmalloc(sizeof(*scratch_leaf), GFP_NOFS);
2004 	if (!scratch_leaf)
2005 		goto out;
2006 
2007 	err = 0;
2008 	while (!err) {
2009 		trans = btrfs_start_transaction(fs_info->fs_root, 0);
2010 		if (IS_ERR(trans)) {
2011 			err = PTR_ERR(trans);
2012 			break;
2013 		}
2014 		if (!fs_info->quota_enabled) {
2015 			err = -EINTR;
2016 		} else {
2017 			err = qgroup_rescan_leaf(fs_info, path, trans,
2018 						 tmp, scratch_leaf);
2019 		}
2020 		if (err > 0)
2021 			btrfs_commit_transaction(trans, fs_info->fs_root);
2022 		else
2023 			btrfs_end_transaction(trans, fs_info->fs_root);
2024 	}
2025 
2026 out:
2027 	kfree(scratch_leaf);
2028 	ulist_free(tmp);
2029 	btrfs_free_path(path);
2030 
2031 	mutex_lock(&fs_info->qgroup_rescan_lock);
2032 	fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_RESCAN;
2033 
2034 	if (err == 2 &&
2035 	    fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT) {
2036 		fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT;
2037 	} else if (err < 0) {
2038 		fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_INCONSISTENT;
2039 	}
2040 	mutex_unlock(&fs_info->qgroup_rescan_lock);
2041 
2042 	if (err >= 0) {
2043 		btrfs_info(fs_info, "qgroup scan completed%s",
2044 			err == 2 ? " (inconsistency flag cleared)" : "");
2045 	} else {
2046 		btrfs_err(fs_info, "qgroup scan failed with %d", err);
2047 	}
2048 
2049 	complete_all(&fs_info->qgroup_rescan_completion);
2050 }
2051 
2052 /*
2053  * Checks that (a) no rescan is running and (b) quota is enabled. Allocates all
2054  * memory required for the rescan context.
2055  */
2056 static int
2057 qgroup_rescan_init(struct btrfs_fs_info *fs_info, u64 progress_objectid,
2058 		   int init_flags)
2059 {
2060 	int ret = 0;
2061 
2062 	if (!init_flags &&
2063 	    (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN) ||
2064 	     !(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON))) {
2065 		ret = -EINVAL;
2066 		goto err;
2067 	}
2068 
2069 	mutex_lock(&fs_info->qgroup_rescan_lock);
2070 	spin_lock(&fs_info->qgroup_lock);
2071 
2072 	if (init_flags) {
2073 		if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN)
2074 			ret = -EINPROGRESS;
2075 		else if (!(fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_ON))
2076 			ret = -EINVAL;
2077 
2078 		if (ret) {
2079 			spin_unlock(&fs_info->qgroup_lock);
2080 			mutex_unlock(&fs_info->qgroup_rescan_lock);
2081 			goto err;
2082 		}
2083 
2084 		fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_RESCAN;
2085 	}
2086 
2087 	memset(&fs_info->qgroup_rescan_progress, 0,
2088 		sizeof(fs_info->qgroup_rescan_progress));
2089 	fs_info->qgroup_rescan_progress.objectid = progress_objectid;
2090 
2091 	spin_unlock(&fs_info->qgroup_lock);
2092 	mutex_unlock(&fs_info->qgroup_rescan_lock);
2093 
2094 	init_completion(&fs_info->qgroup_rescan_completion);
2095 
2096 	memset(&fs_info->qgroup_rescan_work, 0,
2097 	       sizeof(fs_info->qgroup_rescan_work));
2098 	btrfs_init_work(&fs_info->qgroup_rescan_work,
2099 			btrfs_qgroup_rescan_worker, NULL, NULL);
2100 
2101 	if (ret) {
2102 err:
2103 		btrfs_info(fs_info, "qgroup_rescan_init failed with %d", ret);
2104 		return ret;
2105 	}
2106 
2107 	return 0;
2108 }
2109 
2110 static void
2111 qgroup_rescan_zero_tracking(struct btrfs_fs_info *fs_info)
2112 {
2113 	struct rb_node *n;
2114 	struct btrfs_qgroup *qgroup;
2115 
2116 	spin_lock(&fs_info->qgroup_lock);
2117 	/* clear all current qgroup tracking information */
2118 	for (n = rb_first(&fs_info->qgroup_tree); n; n = rb_next(n)) {
2119 		qgroup = rb_entry(n, struct btrfs_qgroup, node);
2120 		qgroup->rfer = 0;
2121 		qgroup->rfer_cmpr = 0;
2122 		qgroup->excl = 0;
2123 		qgroup->excl_cmpr = 0;
2124 	}
2125 	spin_unlock(&fs_info->qgroup_lock);
2126 }
2127 
2128 int
2129 btrfs_qgroup_rescan(struct btrfs_fs_info *fs_info)
2130 {
2131 	int ret = 0;
2132 	struct btrfs_trans_handle *trans;
2133 
2134 	ret = qgroup_rescan_init(fs_info, 0, 1);
2135 	if (ret)
2136 		return ret;
2137 
2138 	/*
2139 	 * We have set the rescan_progress to 0, which means no more
2140 	 * delayed refs will be accounted by btrfs_qgroup_account_ref.
2141 	 * However, btrfs_qgroup_account_ref may be right after its call
2142 	 * to btrfs_find_all_roots, in which case it would still do the
2143 	 * accounting.
2144 	 * To solve this, we're committing the transaction, which will
2145 	 * ensure we run all delayed refs and only after that, we are
2146 	 * going to clear all tracking information for a clean start.
2147 	 */
2148 
2149 	trans = btrfs_join_transaction(fs_info->fs_root);
2150 	if (IS_ERR(trans)) {
2151 		fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_RESCAN;
2152 		return PTR_ERR(trans);
2153 	}
2154 	ret = btrfs_commit_transaction(trans, fs_info->fs_root);
2155 	if (ret) {
2156 		fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_RESCAN;
2157 		return ret;
2158 	}
2159 
2160 	qgroup_rescan_zero_tracking(fs_info);
2161 
2162 	btrfs_queue_work(fs_info->qgroup_rescan_workers,
2163 			 &fs_info->qgroup_rescan_work);
2164 
2165 	return 0;
2166 }
2167 
2168 int btrfs_qgroup_wait_for_completion(struct btrfs_fs_info *fs_info)
2169 {
2170 	int running;
2171 	int ret = 0;
2172 
2173 	mutex_lock(&fs_info->qgroup_rescan_lock);
2174 	spin_lock(&fs_info->qgroup_lock);
2175 	running = fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN;
2176 	spin_unlock(&fs_info->qgroup_lock);
2177 	mutex_unlock(&fs_info->qgroup_rescan_lock);
2178 
2179 	if (running)
2180 		ret = wait_for_completion_interruptible(
2181 					&fs_info->qgroup_rescan_completion);
2182 
2183 	return ret;
2184 }
2185 
2186 /*
2187  * this is only called from open_ctree where we're still single threaded, thus
2188  * locking is omitted here.
2189  */
2190 void
2191 btrfs_qgroup_rescan_resume(struct btrfs_fs_info *fs_info)
2192 {
2193 	if (fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN)
2194 		btrfs_queue_work(fs_info->qgroup_rescan_workers,
2195 				 &fs_info->qgroup_rescan_work);
2196 }
2197