Btrfs: fix deadlock in btrfs_commit_transaction
[linux-2.6-block.git] / fs / btrfs / transaction.c
CommitLineData
6cbd5570
CM
1/*
2 * Copyright (C) 2007 Oracle. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public
14 * License along with this program; if not, write to the
15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 * Boston, MA 021110-1307, USA.
17 */
18
79154b1b 19#include <linux/fs.h>
5a0e3ad6 20#include <linux/slab.h>
34088780 21#include <linux/sched.h>
d3c2fdcf 22#include <linux/writeback.h>
5f39d397 23#include <linux/pagemap.h>
5f2cc086 24#include <linux/blkdev.h>
79154b1b
CM
25#include "ctree.h"
26#include "disk-io.h"
27#include "transaction.h"
925baedd 28#include "locking.h"
e02119d5 29#include "tree-log.h"
79154b1b 30
0f7d52f4
CM
31#define BTRFS_ROOT_TRANS_TAG 0
32
80b6794d 33static noinline void put_transaction(struct btrfs_transaction *transaction)
79154b1b 34{
2c90e5d6 35 WARN_ON(transaction->use_count == 0);
79154b1b 36 transaction->use_count--;
78fae27e 37 if (transaction->use_count == 0) {
8fd17795 38 list_del_init(&transaction->list);
2c90e5d6
CM
39 memset(transaction, 0, sizeof(*transaction));
40 kmem_cache_free(btrfs_transaction_cachep, transaction);
78fae27e 41 }
79154b1b
CM
42}
43
817d52f8
JB
44static noinline void switch_commit_root(struct btrfs_root *root)
45{
817d52f8
JB
46 free_extent_buffer(root->commit_root);
47 root->commit_root = btrfs_root_node(root);
817d52f8
JB
48}
49
d352ac68
CM
50/*
51 * either allocate a new transaction or hop into the existing one
52 */
80b6794d 53static noinline int join_transaction(struct btrfs_root *root)
79154b1b
CM
54{
55 struct btrfs_transaction *cur_trans;
56 cur_trans = root->fs_info->running_transaction;
57 if (!cur_trans) {
2c90e5d6
CM
58 cur_trans = kmem_cache_alloc(btrfs_transaction_cachep,
59 GFP_NOFS);
79154b1b 60 BUG_ON(!cur_trans);
0f7d52f4 61 root->fs_info->generation++;
15ee9bc7
JB
62 cur_trans->num_writers = 1;
63 cur_trans->num_joined = 0;
0f7d52f4 64 cur_trans->transid = root->fs_info->generation;
79154b1b
CM
65 init_waitqueue_head(&cur_trans->writer_wait);
66 init_waitqueue_head(&cur_trans->commit_wait);
67 cur_trans->in_commit = 0;
f9295749 68 cur_trans->blocked = 0;
d5719762 69 cur_trans->use_count = 1;
79154b1b 70 cur_trans->commit_done = 0;
08607c1b 71 cur_trans->start_time = get_seconds();
56bec294 72
6bef4d31 73 cur_trans->delayed_refs.root = RB_ROOT;
56bec294 74 cur_trans->delayed_refs.num_entries = 0;
c3e69d58
CM
75 cur_trans->delayed_refs.num_heads_ready = 0;
76 cur_trans->delayed_refs.num_heads = 0;
56bec294 77 cur_trans->delayed_refs.flushing = 0;
c3e69d58 78 cur_trans->delayed_refs.run_delayed_start = 0;
56bec294
CM
79 spin_lock_init(&cur_trans->delayed_refs.lock);
80
3063d29f 81 INIT_LIST_HEAD(&cur_trans->pending_snapshots);
8fd17795 82 list_add_tail(&cur_trans->list, &root->fs_info->trans_list);
d1310b2e 83 extent_io_tree_init(&cur_trans->dirty_pages,
5f39d397
CM
84 root->fs_info->btree_inode->i_mapping,
85 GFP_NOFS);
48ec2cf8
CM
86 spin_lock(&root->fs_info->new_trans_lock);
87 root->fs_info->running_transaction = cur_trans;
88 spin_unlock(&root->fs_info->new_trans_lock);
15ee9bc7
JB
89 } else {
90 cur_trans->num_writers++;
91 cur_trans->num_joined++;
79154b1b 92 }
15ee9bc7 93
79154b1b
CM
94 return 0;
95}
96
d352ac68 97/*
d397712b
CM
98 * this does all the record keeping required to make sure that a reference
99 * counted root is properly recorded in a given transaction. This is required
100 * to make sure the old root from before we joined the transaction is deleted
101 * when the transaction commits
d352ac68 102 */
5d4f98a2
YZ
103static noinline int record_root_in_trans(struct btrfs_trans_handle *trans,
104 struct btrfs_root *root)
6702ed49 105{
5d4f98a2 106 if (root->ref_cows && root->last_trans < trans->transid) {
6702ed49 107 WARN_ON(root == root->fs_info->extent_root);
5d4f98a2
YZ
108 WARN_ON(root->commit_root != root->node);
109
110 radix_tree_tag_set(&root->fs_info->fs_roots_radix,
111 (unsigned long)root->root_key.objectid,
112 BTRFS_ROOT_TRANS_TAG);
113 root->last_trans = trans->transid;
114 btrfs_init_reloc_root(trans, root);
115 }
116 return 0;
117}
bcc63abb 118
5d4f98a2
YZ
119int btrfs_record_root_in_trans(struct btrfs_trans_handle *trans,
120 struct btrfs_root *root)
121{
122 if (!root->ref_cows)
123 return 0;
bcc63abb 124
5d4f98a2
YZ
125 mutex_lock(&root->fs_info->trans_mutex);
126 if (root->last_trans == trans->transid) {
127 mutex_unlock(&root->fs_info->trans_mutex);
128 return 0;
6702ed49 129 }
5d4f98a2
YZ
130
131 record_root_in_trans(trans, root);
132 mutex_unlock(&root->fs_info->trans_mutex);
6702ed49
CM
133 return 0;
134}
135
d352ac68
CM
136/* wait for commit against the current transaction to become unblocked
137 * when this is done, it is safe to start a new transaction, but the current
138 * transaction might not be fully on disk.
139 */
37d1aeee 140static void wait_current_trans(struct btrfs_root *root)
79154b1b 141{
f9295749 142 struct btrfs_transaction *cur_trans;
79154b1b 143
f9295749 144 cur_trans = root->fs_info->running_transaction;
37d1aeee 145 if (cur_trans && cur_trans->blocked) {
f9295749
CM
146 DEFINE_WAIT(wait);
147 cur_trans->use_count++;
d397712b 148 while (1) {
f9295749
CM
149 prepare_to_wait(&root->fs_info->transaction_wait, &wait,
150 TASK_UNINTERRUPTIBLE);
471fa17d 151 if (!cur_trans->blocked)
f9295749 152 break;
471fa17d
ZL
153 mutex_unlock(&root->fs_info->trans_mutex);
154 schedule();
155 mutex_lock(&root->fs_info->trans_mutex);
f9295749 156 }
471fa17d 157 finish_wait(&root->fs_info->transaction_wait, &wait);
f9295749
CM
158 put_transaction(cur_trans);
159 }
37d1aeee
CM
160}
161
249ac1e5
JB
162enum btrfs_trans_type {
163 TRANS_START,
164 TRANS_JOIN,
165 TRANS_USERSPACE,
0af3d00b 166 TRANS_JOIN_NOLOCK,
249ac1e5
JB
167};
168
a22285a6
YZ
169static int may_wait_transaction(struct btrfs_root *root, int type)
170{
171 if (!root->fs_info->log_root_recovering &&
172 ((type == TRANS_START && !root->fs_info->open_ioctl_trans) ||
173 type == TRANS_USERSPACE))
174 return 1;
175 return 0;
176}
177
e02119d5 178static struct btrfs_trans_handle *start_transaction(struct btrfs_root *root,
a22285a6 179 u64 num_items, int type)
37d1aeee 180{
a22285a6
YZ
181 struct btrfs_trans_handle *h;
182 struct btrfs_transaction *cur_trans;
37d1aeee 183 int ret;
a22285a6
YZ
184again:
185 h = kmem_cache_alloc(btrfs_trans_handle_cachep, GFP_NOFS);
186 if (!h)
187 return ERR_PTR(-ENOMEM);
37d1aeee 188
0af3d00b
JB
189 if (type != TRANS_JOIN_NOLOCK)
190 mutex_lock(&root->fs_info->trans_mutex);
a22285a6 191 if (may_wait_transaction(root, type))
37d1aeee 192 wait_current_trans(root);
a22285a6 193
79154b1b
CM
194 ret = join_transaction(root);
195 BUG_ON(ret);
0f7d52f4 196
a22285a6
YZ
197 cur_trans = root->fs_info->running_transaction;
198 cur_trans->use_count++;
0af3d00b
JB
199 if (type != TRANS_JOIN_NOLOCK)
200 mutex_unlock(&root->fs_info->trans_mutex);
a22285a6
YZ
201
202 h->transid = cur_trans->transid;
203 h->transaction = cur_trans;
79154b1b 204 h->blocks_used = 0;
d2fb3437 205 h->block_group = 0;
a22285a6 206 h->bytes_reserved = 0;
56bec294 207 h->delayed_ref_updates = 0;
f0486c68 208 h->block_rsv = NULL;
b7ec40d7 209
a22285a6
YZ
210 smp_mb();
211 if (cur_trans->blocked && may_wait_transaction(root, type)) {
212 btrfs_commit_transaction(h, root);
213 goto again;
214 }
215
216 if (num_items > 0) {
8bb8ab2e 217 ret = btrfs_trans_reserve_metadata(h, root, num_items);
a22285a6
YZ
218 if (ret == -EAGAIN) {
219 btrfs_commit_transaction(h, root);
220 goto again;
221 }
222 if (ret < 0) {
223 btrfs_end_transaction(h, root);
224 return ERR_PTR(ret);
225 }
226 }
9ed74f2d 227
0af3d00b
JB
228 if (type != TRANS_JOIN_NOLOCK)
229 mutex_lock(&root->fs_info->trans_mutex);
5d4f98a2 230 record_root_in_trans(h, root);
0af3d00b
JB
231 if (type != TRANS_JOIN_NOLOCK)
232 mutex_unlock(&root->fs_info->trans_mutex);
a22285a6
YZ
233
234 if (!current->journal_info && type != TRANS_USERSPACE)
235 current->journal_info = h;
79154b1b
CM
236 return h;
237}
238
f9295749 239struct btrfs_trans_handle *btrfs_start_transaction(struct btrfs_root *root,
a22285a6 240 int num_items)
f9295749 241{
a22285a6 242 return start_transaction(root, num_items, TRANS_START);
f9295749
CM
243}
244struct btrfs_trans_handle *btrfs_join_transaction(struct btrfs_root *root,
245 int num_blocks)
246{
a22285a6 247 return start_transaction(root, 0, TRANS_JOIN);
f9295749
CM
248}
249
0af3d00b
JB
250struct btrfs_trans_handle *btrfs_join_transaction_nolock(struct btrfs_root *root,
251 int num_blocks)
252{
253 return start_transaction(root, 0, TRANS_JOIN_NOLOCK);
254}
255
9ca9ee09
SW
256struct btrfs_trans_handle *btrfs_start_ioctl_transaction(struct btrfs_root *r,
257 int num_blocks)
258{
a22285a6 259 return start_transaction(r, 0, TRANS_USERSPACE);
9ca9ee09
SW
260}
261
d352ac68 262/* wait for a transaction commit to be fully complete */
89ce8a63
CM
263static noinline int wait_for_commit(struct btrfs_root *root,
264 struct btrfs_transaction *commit)
265{
266 DEFINE_WAIT(wait);
267 mutex_lock(&root->fs_info->trans_mutex);
d397712b 268 while (!commit->commit_done) {
89ce8a63
CM
269 prepare_to_wait(&commit->commit_wait, &wait,
270 TASK_UNINTERRUPTIBLE);
271 if (commit->commit_done)
272 break;
273 mutex_unlock(&root->fs_info->trans_mutex);
274 schedule();
275 mutex_lock(&root->fs_info->trans_mutex);
276 }
277 mutex_unlock(&root->fs_info->trans_mutex);
278 finish_wait(&commit->commit_wait, &wait);
279 return 0;
280}
281
5d4f98a2 282#if 0
d352ac68 283/*
d397712b
CM
284 * rate limit against the drop_snapshot code. This helps to slow down new
285 * operations if the drop_snapshot code isn't able to keep up.
d352ac68 286 */
37d1aeee 287static void throttle_on_drops(struct btrfs_root *root)
ab78c84d
CM
288{
289 struct btrfs_fs_info *info = root->fs_info;
2dd3e67b 290 int harder_count = 0;
ab78c84d 291
2dd3e67b 292harder:
ab78c84d
CM
293 if (atomic_read(&info->throttles)) {
294 DEFINE_WAIT(wait);
295 int thr;
ab78c84d
CM
296 thr = atomic_read(&info->throttle_gen);
297
298 do {
299 prepare_to_wait(&info->transaction_throttle,
300 &wait, TASK_UNINTERRUPTIBLE);
301 if (!atomic_read(&info->throttles)) {
302 finish_wait(&info->transaction_throttle, &wait);
303 break;
304 }
305 schedule();
306 finish_wait(&info->transaction_throttle, &wait);
307 } while (thr == atomic_read(&info->throttle_gen));
2dd3e67b
CM
308 harder_count++;
309
310 if (root->fs_info->total_ref_cache_size > 1 * 1024 * 1024 &&
311 harder_count < 2)
312 goto harder;
313
314 if (root->fs_info->total_ref_cache_size > 5 * 1024 * 1024 &&
315 harder_count < 10)
316 goto harder;
317
318 if (root->fs_info->total_ref_cache_size > 10 * 1024 * 1024 &&
319 harder_count < 20)
320 goto harder;
ab78c84d
CM
321 }
322}
5d4f98a2 323#endif
ab78c84d 324
37d1aeee
CM
325void btrfs_throttle(struct btrfs_root *root)
326{
327 mutex_lock(&root->fs_info->trans_mutex);
9ca9ee09
SW
328 if (!root->fs_info->open_ioctl_trans)
329 wait_current_trans(root);
37d1aeee 330 mutex_unlock(&root->fs_info->trans_mutex);
37d1aeee
CM
331}
332
8929ecfa
YZ
333static int should_end_transaction(struct btrfs_trans_handle *trans,
334 struct btrfs_root *root)
335{
336 int ret;
337 ret = btrfs_block_rsv_check(trans, root,
338 &root->fs_info->global_block_rsv, 0, 5);
339 return ret ? 1 : 0;
340}
341
342int btrfs_should_end_transaction(struct btrfs_trans_handle *trans,
343 struct btrfs_root *root)
344{
345 struct btrfs_transaction *cur_trans = trans->transaction;
346 int updates;
347
348 if (cur_trans->blocked || cur_trans->delayed_refs.flushing)
349 return 1;
350
351 updates = trans->delayed_ref_updates;
352 trans->delayed_ref_updates = 0;
353 if (updates)
354 btrfs_run_delayed_refs(trans, root, updates);
355
356 return should_end_transaction(trans, root);
357}
358
89ce8a63 359static int __btrfs_end_transaction(struct btrfs_trans_handle *trans,
0af3d00b 360 struct btrfs_root *root, int throttle, int lock)
79154b1b 361{
8929ecfa 362 struct btrfs_transaction *cur_trans = trans->transaction;
ab78c84d 363 struct btrfs_fs_info *info = root->fs_info;
c3e69d58
CM
364 int count = 0;
365
366 while (count < 4) {
367 unsigned long cur = trans->delayed_ref_updates;
368 trans->delayed_ref_updates = 0;
369 if (cur &&
370 trans->transaction->delayed_refs.num_heads_ready > 64) {
371 trans->delayed_ref_updates = 0;
b7ec40d7
CM
372
373 /*
374 * do a full flush if the transaction is trying
375 * to close
376 */
377 if (trans->transaction->delayed_refs.flushing)
378 cur = 0;
c3e69d58
CM
379 btrfs_run_delayed_refs(trans, root, cur);
380 } else {
381 break;
382 }
383 count++;
56bec294
CM
384 }
385
a22285a6
YZ
386 btrfs_trans_release_metadata(trans, root);
387
0af3d00b 388 if (lock && !root->fs_info->open_ioctl_trans &&
8929ecfa
YZ
389 should_end_transaction(trans, root))
390 trans->transaction->blocked = 1;
391
0af3d00b 392 if (lock && cur_trans->blocked && !cur_trans->in_commit) {
8929ecfa
YZ
393 if (throttle)
394 return btrfs_commit_transaction(trans, root);
395 else
396 wake_up_process(info->transaction_kthread);
397 }
398
0af3d00b
JB
399 if (lock)
400 mutex_lock(&info->trans_mutex);
8929ecfa 401 WARN_ON(cur_trans != info->running_transaction);
d5719762 402 WARN_ON(cur_trans->num_writers < 1);
ccd467d6 403 cur_trans->num_writers--;
89ce8a63 404
99d16cbc 405 smp_mb();
79154b1b
CM
406 if (waitqueue_active(&cur_trans->writer_wait))
407 wake_up(&cur_trans->writer_wait);
79154b1b 408 put_transaction(cur_trans);
0af3d00b
JB
409 if (lock)
410 mutex_unlock(&info->trans_mutex);
9ed74f2d
JB
411
412 if (current->journal_info == trans)
413 current->journal_info = NULL;
d6025579 414 memset(trans, 0, sizeof(*trans));
2c90e5d6 415 kmem_cache_free(btrfs_trans_handle_cachep, trans);
ab78c84d 416
24bbcf04
YZ
417 if (throttle)
418 btrfs_run_delayed_iputs(root);
419
79154b1b
CM
420 return 0;
421}
422
89ce8a63
CM
423int btrfs_end_transaction(struct btrfs_trans_handle *trans,
424 struct btrfs_root *root)
425{
0af3d00b 426 return __btrfs_end_transaction(trans, root, 0, 1);
89ce8a63
CM
427}
428
429int btrfs_end_transaction_throttle(struct btrfs_trans_handle *trans,
430 struct btrfs_root *root)
431{
0af3d00b
JB
432 return __btrfs_end_transaction(trans, root, 1, 1);
433}
434
435int btrfs_end_transaction_nolock(struct btrfs_trans_handle *trans,
436 struct btrfs_root *root)
437{
438 return __btrfs_end_transaction(trans, root, 0, 0);
89ce8a63
CM
439}
440
d352ac68
CM
441/*
442 * when btree blocks are allocated, they have some corresponding bits set for
443 * them in one of two extent_io trees. This is used to make sure all of
690587d1 444 * those extents are sent to disk but does not wait on them
d352ac68 445 */
690587d1 446int btrfs_write_marked_extents(struct btrfs_root *root,
8cef4e16 447 struct extent_io_tree *dirty_pages, int mark)
79154b1b 448{
7c4452b9 449 int ret;
777e6bd7 450 int err = 0;
7c4452b9
CM
451 int werr = 0;
452 struct page *page;
7c4452b9 453 struct inode *btree_inode = root->fs_info->btree_inode;
777e6bd7 454 u64 start = 0;
5f39d397
CM
455 u64 end;
456 unsigned long index;
7c4452b9 457
d397712b 458 while (1) {
777e6bd7 459 ret = find_first_extent_bit(dirty_pages, start, &start, &end,
8cef4e16 460 mark);
5f39d397 461 if (ret)
7c4452b9 462 break;
d397712b 463 while (start <= end) {
777e6bd7
CM
464 cond_resched();
465
5f39d397 466 index = start >> PAGE_CACHE_SHIFT;
35ebb934 467 start = (u64)(index + 1) << PAGE_CACHE_SHIFT;
4bef0848 468 page = find_get_page(btree_inode->i_mapping, index);
7c4452b9
CM
469 if (!page)
470 continue;
4bef0848
CM
471
472 btree_lock_page_hook(page);
473 if (!page->mapping) {
474 unlock_page(page);
475 page_cache_release(page);
476 continue;
477 }
478
6702ed49
CM
479 if (PageWriteback(page)) {
480 if (PageDirty(page))
481 wait_on_page_writeback(page);
482 else {
483 unlock_page(page);
484 page_cache_release(page);
485 continue;
486 }
487 }
7c4452b9
CM
488 err = write_one_page(page, 0);
489 if (err)
490 werr = err;
491 page_cache_release(page);
492 }
493 }
690587d1
CM
494 if (err)
495 werr = err;
496 return werr;
497}
498
499/*
500 * when btree blocks are allocated, they have some corresponding bits set for
501 * them in one of two extent_io trees. This is used to make sure all of
502 * those extents are on disk for transaction or log commit. We wait
503 * on all the pages and clear them from the dirty pages state tree
504 */
505int btrfs_wait_marked_extents(struct btrfs_root *root,
8cef4e16 506 struct extent_io_tree *dirty_pages, int mark)
690587d1
CM
507{
508 int ret;
509 int err = 0;
510 int werr = 0;
511 struct page *page;
512 struct inode *btree_inode = root->fs_info->btree_inode;
513 u64 start = 0;
514 u64 end;
515 unsigned long index;
516
d397712b 517 while (1) {
8cef4e16
YZ
518 ret = find_first_extent_bit(dirty_pages, start, &start, &end,
519 mark);
777e6bd7
CM
520 if (ret)
521 break;
522
8cef4e16 523 clear_extent_bits(dirty_pages, start, end, mark, GFP_NOFS);
d397712b 524 while (start <= end) {
777e6bd7
CM
525 index = start >> PAGE_CACHE_SHIFT;
526 start = (u64)(index + 1) << PAGE_CACHE_SHIFT;
527 page = find_get_page(btree_inode->i_mapping, index);
528 if (!page)
529 continue;
530 if (PageDirty(page)) {
4bef0848
CM
531 btree_lock_page_hook(page);
532 wait_on_page_writeback(page);
777e6bd7
CM
533 err = write_one_page(page, 0);
534 if (err)
535 werr = err;
536 }
105d931d 537 wait_on_page_writeback(page);
777e6bd7
CM
538 page_cache_release(page);
539 cond_resched();
540 }
541 }
7c4452b9
CM
542 if (err)
543 werr = err;
544 return werr;
79154b1b
CM
545}
546
690587d1
CM
547/*
548 * when btree blocks are allocated, they have some corresponding bits set for
549 * them in one of two extent_io trees. This is used to make sure all of
550 * those extents are on disk for transaction or log commit
551 */
552int btrfs_write_and_wait_marked_extents(struct btrfs_root *root,
8cef4e16 553 struct extent_io_tree *dirty_pages, int mark)
690587d1
CM
554{
555 int ret;
556 int ret2;
557
8cef4e16
YZ
558 ret = btrfs_write_marked_extents(root, dirty_pages, mark);
559 ret2 = btrfs_wait_marked_extents(root, dirty_pages, mark);
690587d1
CM
560 return ret || ret2;
561}
562
d0c803c4
CM
563int btrfs_write_and_wait_transaction(struct btrfs_trans_handle *trans,
564 struct btrfs_root *root)
565{
566 if (!trans || !trans->transaction) {
567 struct inode *btree_inode;
568 btree_inode = root->fs_info->btree_inode;
569 return filemap_write_and_wait(btree_inode->i_mapping);
570 }
571 return btrfs_write_and_wait_marked_extents(root,
8cef4e16
YZ
572 &trans->transaction->dirty_pages,
573 EXTENT_DIRTY);
d0c803c4
CM
574}
575
d352ac68
CM
576/*
577 * this is used to update the root pointer in the tree of tree roots.
578 *
579 * But, in the case of the extent allocation tree, updating the root
580 * pointer may allocate blocks which may change the root of the extent
581 * allocation tree.
582 *
583 * So, this loops and repeats and makes sure the cowonly root didn't
584 * change while the root pointer was being updated in the metadata.
585 */
0b86a832
CM
586static int update_cowonly_root(struct btrfs_trans_handle *trans,
587 struct btrfs_root *root)
79154b1b
CM
588{
589 int ret;
0b86a832 590 u64 old_root_bytenr;
86b9f2ec 591 u64 old_root_used;
0b86a832 592 struct btrfs_root *tree_root = root->fs_info->tree_root;
79154b1b 593
86b9f2ec 594 old_root_used = btrfs_root_used(&root->root_item);
0b86a832 595 btrfs_write_dirty_block_groups(trans, root);
56bec294 596
d397712b 597 while (1) {
0b86a832 598 old_root_bytenr = btrfs_root_bytenr(&root->root_item);
86b9f2ec
YZ
599 if (old_root_bytenr == root->node->start &&
600 old_root_used == btrfs_root_used(&root->root_item))
79154b1b 601 break;
87ef2bb4 602
5d4f98a2 603 btrfs_set_root_node(&root->root_item, root->node);
79154b1b 604 ret = btrfs_update_root(trans, tree_root,
0b86a832
CM
605 &root->root_key,
606 &root->root_item);
79154b1b 607 BUG_ON(ret);
56bec294 608
86b9f2ec 609 old_root_used = btrfs_root_used(&root->root_item);
4a8c9a62 610 ret = btrfs_write_dirty_block_groups(trans, root);
56bec294 611 BUG_ON(ret);
0b86a832 612 }
276e680d
YZ
613
614 if (root != root->fs_info->extent_root)
615 switch_commit_root(root);
616
0b86a832
CM
617 return 0;
618}
619
d352ac68
CM
620/*
621 * update all the cowonly tree roots on disk
622 */
5d4f98a2
YZ
623static noinline int commit_cowonly_roots(struct btrfs_trans_handle *trans,
624 struct btrfs_root *root)
0b86a832
CM
625{
626 struct btrfs_fs_info *fs_info = root->fs_info;
627 struct list_head *next;
84234f3a 628 struct extent_buffer *eb;
56bec294 629 int ret;
84234f3a 630
56bec294
CM
631 ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
632 BUG_ON(ret);
87ef2bb4 633
84234f3a 634 eb = btrfs_lock_root_node(fs_info->tree_root);
9fa8cfe7 635 btrfs_cow_block(trans, fs_info->tree_root, eb, NULL, 0, &eb);
84234f3a
YZ
636 btrfs_tree_unlock(eb);
637 free_extent_buffer(eb);
0b86a832 638
56bec294
CM
639 ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
640 BUG_ON(ret);
87ef2bb4 641
d397712b 642 while (!list_empty(&fs_info->dirty_cowonly_roots)) {
0b86a832
CM
643 next = fs_info->dirty_cowonly_roots.next;
644 list_del_init(next);
645 root = list_entry(next, struct btrfs_root, dirty_list);
87ef2bb4 646
0b86a832 647 update_cowonly_root(trans, root);
79154b1b 648 }
276e680d
YZ
649
650 down_write(&fs_info->extent_commit_sem);
651 switch_commit_root(fs_info->extent_root);
652 up_write(&fs_info->extent_commit_sem);
653
79154b1b
CM
654 return 0;
655}
656
d352ac68
CM
657/*
658 * dead roots are old snapshots that need to be deleted. This allocates
659 * a dirty root struct and adds it into the list of dead roots that need to
660 * be deleted
661 */
5d4f98a2 662int btrfs_add_dead_root(struct btrfs_root *root)
5eda7b5e 663{
b48652c1 664 mutex_lock(&root->fs_info->trans_mutex);
5d4f98a2 665 list_add(&root->root_list, &root->fs_info->dead_roots);
b48652c1 666 mutex_unlock(&root->fs_info->trans_mutex);
5eda7b5e
CM
667 return 0;
668}
669
d352ac68 670/*
5d4f98a2 671 * update all the cowonly tree roots on disk
d352ac68 672 */
5d4f98a2
YZ
673static noinline int commit_fs_roots(struct btrfs_trans_handle *trans,
674 struct btrfs_root *root)
0f7d52f4 675{
0f7d52f4 676 struct btrfs_root *gang[8];
5d4f98a2 677 struct btrfs_fs_info *fs_info = root->fs_info;
0f7d52f4
CM
678 int i;
679 int ret;
54aa1f4d
CM
680 int err = 0;
681
d397712b 682 while (1) {
5d4f98a2
YZ
683 ret = radix_tree_gang_lookup_tag(&fs_info->fs_roots_radix,
684 (void **)gang, 0,
0f7d52f4
CM
685 ARRAY_SIZE(gang),
686 BTRFS_ROOT_TRANS_TAG);
687 if (ret == 0)
688 break;
689 for (i = 0; i < ret; i++) {
690 root = gang[i];
5d4f98a2
YZ
691 radix_tree_tag_clear(&fs_info->fs_roots_radix,
692 (unsigned long)root->root_key.objectid,
693 BTRFS_ROOT_TRANS_TAG);
31153d81 694
e02119d5 695 btrfs_free_log(trans, root);
5d4f98a2 696 btrfs_update_reloc_root(trans, root);
d68fc57b 697 btrfs_orphan_commit_root(trans, root);
bcc63abb 698
978d910d 699 if (root->commit_root != root->node) {
817d52f8 700 switch_commit_root(root);
978d910d
YZ
701 btrfs_set_root_node(&root->root_item,
702 root->node);
703 }
5d4f98a2 704
5d4f98a2 705 err = btrfs_update_root(trans, fs_info->tree_root,
0f7d52f4
CM
706 &root->root_key,
707 &root->root_item);
54aa1f4d
CM
708 if (err)
709 break;
0f7d52f4
CM
710 }
711 }
54aa1f4d 712 return err;
0f7d52f4
CM
713}
714
d352ac68
CM
715/*
716 * defrag a given btree. If cacheonly == 1, this won't read from the disk,
717 * otherwise every leaf in the btree is read and defragged.
718 */
e9d0b13b
CM
719int btrfs_defrag_root(struct btrfs_root *root, int cacheonly)
720{
721 struct btrfs_fs_info *info = root->fs_info;
e9d0b13b 722 struct btrfs_trans_handle *trans;
8929ecfa 723 int ret;
d3c2fdcf 724 unsigned long nr;
e9d0b13b 725
8929ecfa 726 if (xchg(&root->defrag_running, 1))
e9d0b13b 727 return 0;
8929ecfa 728
6b80053d 729 while (1) {
8929ecfa
YZ
730 trans = btrfs_start_transaction(root, 0);
731 if (IS_ERR(trans))
732 return PTR_ERR(trans);
733
e9d0b13b 734 ret = btrfs_defrag_leaves(trans, root, cacheonly);
8929ecfa 735
d3c2fdcf 736 nr = trans->blocks_used;
e9d0b13b 737 btrfs_end_transaction(trans, root);
d3c2fdcf 738 btrfs_btree_balance_dirty(info->tree_root, nr);
e9d0b13b
CM
739 cond_resched();
740
3f157a2f 741 if (root->fs_info->closing || ret != -EAGAIN)
e9d0b13b
CM
742 break;
743 }
744 root->defrag_running = 0;
8929ecfa 745 return ret;
e9d0b13b
CM
746}
747
2c47e605 748#if 0
b7ec40d7
CM
749/*
750 * when dropping snapshots, we generate a ton of delayed refs, and it makes
751 * sense not to join the transaction while it is trying to flush the current
752 * queue of delayed refs out.
753 *
754 * This is used by the drop snapshot code only
755 */
756static noinline int wait_transaction_pre_flush(struct btrfs_fs_info *info)
757{
758 DEFINE_WAIT(wait);
759
760 mutex_lock(&info->trans_mutex);
761 while (info->running_transaction &&
762 info->running_transaction->delayed_refs.flushing) {
763 prepare_to_wait(&info->transaction_wait, &wait,
764 TASK_UNINTERRUPTIBLE);
765 mutex_unlock(&info->trans_mutex);
59bc5c75 766
b7ec40d7 767 schedule();
59bc5c75 768
b7ec40d7
CM
769 mutex_lock(&info->trans_mutex);
770 finish_wait(&info->transaction_wait, &wait);
771 }
772 mutex_unlock(&info->trans_mutex);
773 return 0;
774}
775
d352ac68
CM
776/*
777 * Given a list of roots that need to be deleted, call btrfs_drop_snapshot on
778 * all of them
779 */
5d4f98a2 780int btrfs_drop_dead_root(struct btrfs_root *root)
0f7d52f4 781{
0f7d52f4 782 struct btrfs_trans_handle *trans;
5d4f98a2 783 struct btrfs_root *tree_root = root->fs_info->tree_root;
d3c2fdcf 784 unsigned long nr;
5d4f98a2 785 int ret;
58176a96 786
5d4f98a2
YZ
787 while (1) {
788 /*
789 * we don't want to jump in and create a bunch of
790 * delayed refs if the transaction is starting to close
791 */
792 wait_transaction_pre_flush(tree_root->fs_info);
793 trans = btrfs_start_transaction(tree_root, 1);
a2135011 794
5d4f98a2
YZ
795 /*
796 * we've joined a transaction, make sure it isn't
797 * closing right now
798 */
799 if (trans->transaction->delayed_refs.flushing) {
800 btrfs_end_transaction(trans, tree_root);
801 continue;
9f3a7427 802 }
58176a96 803
5d4f98a2
YZ
804 ret = btrfs_drop_snapshot(trans, root);
805 if (ret != -EAGAIN)
806 break;
a2135011 807
5d4f98a2
YZ
808 ret = btrfs_update_root(trans, tree_root,
809 &root->root_key,
810 &root->root_item);
811 if (ret)
54aa1f4d 812 break;
bcc63abb 813
d3c2fdcf 814 nr = trans->blocks_used;
0f7d52f4
CM
815 ret = btrfs_end_transaction(trans, tree_root);
816 BUG_ON(ret);
5eda7b5e 817
d3c2fdcf 818 btrfs_btree_balance_dirty(tree_root, nr);
4dc11904 819 cond_resched();
0f7d52f4 820 }
5d4f98a2
YZ
821 BUG_ON(ret);
822
823 ret = btrfs_del_root(trans, tree_root, &root->root_key);
824 BUG_ON(ret);
825
826 nr = trans->blocks_used;
827 ret = btrfs_end_transaction(trans, tree_root);
828 BUG_ON(ret);
829
830 free_extent_buffer(root->node);
831 free_extent_buffer(root->commit_root);
832 kfree(root);
833
834 btrfs_btree_balance_dirty(tree_root, nr);
54aa1f4d 835 return ret;
0f7d52f4 836}
2c47e605 837#endif
0f7d52f4 838
d352ac68
CM
839/*
840 * new snapshots need to be created at a very specific time in the
841 * transaction commit. This does the actual creation
842 */
80b6794d 843static noinline int create_pending_snapshot(struct btrfs_trans_handle *trans,
3063d29f
CM
844 struct btrfs_fs_info *fs_info,
845 struct btrfs_pending_snapshot *pending)
846{
847 struct btrfs_key key;
80b6794d 848 struct btrfs_root_item *new_root_item;
3063d29f
CM
849 struct btrfs_root *tree_root = fs_info->tree_root;
850 struct btrfs_root *root = pending->root;
6bdb72de
SW
851 struct btrfs_root *parent_root;
852 struct inode *parent_inode;
a22285a6 853 struct dentry *dentry;
3063d29f 854 struct extent_buffer *tmp;
925baedd 855 struct extent_buffer *old;
3063d29f 856 int ret;
d68fc57b 857 u64 to_reserve = 0;
6bdb72de 858 u64 index = 0;
a22285a6 859 u64 objectid;
3063d29f 860
80b6794d
CM
861 new_root_item = kmalloc(sizeof(*new_root_item), GFP_NOFS);
862 if (!new_root_item) {
a22285a6 863 pending->error = -ENOMEM;
80b6794d
CM
864 goto fail;
865 }
a22285a6 866
3063d29f 867 ret = btrfs_find_free_objectid(trans, tree_root, 0, &objectid);
a22285a6
YZ
868 if (ret) {
869 pending->error = ret;
3063d29f 870 goto fail;
a22285a6 871 }
3063d29f 872
3fd0a558 873 btrfs_reloc_pre_snapshot(trans, pending, &to_reserve);
d68fc57b
YZ
874 btrfs_orphan_pre_snapshot(trans, pending, &to_reserve);
875
876 if (to_reserve > 0) {
877 ret = btrfs_block_rsv_add(trans, root, &pending->block_rsv,
8bb8ab2e 878 to_reserve);
d68fc57b
YZ
879 if (ret) {
880 pending->error = ret;
881 goto fail;
882 }
883 }
884
3063d29f 885 key.objectid = objectid;
a22285a6
YZ
886 key.offset = (u64)-1;
887 key.type = BTRFS_ROOT_ITEM_KEY;
3063d29f 888
a22285a6 889 trans->block_rsv = &pending->block_rsv;
3de4586c 890
a22285a6
YZ
891 dentry = pending->dentry;
892 parent_inode = dentry->d_parent->d_inode;
893 parent_root = BTRFS_I(parent_inode)->root;
6bdb72de 894 record_root_in_trans(trans, parent_root);
a22285a6 895
3063d29f
CM
896 /*
897 * insert the directory item
898 */
3de4586c 899 ret = btrfs_set_inode_index(parent_inode, &index);
6bdb72de 900 BUG_ON(ret);
0660b5af 901 ret = btrfs_insert_dir_item(trans, parent_root,
a22285a6
YZ
902 dentry->d_name.name, dentry->d_name.len,
903 parent_inode->i_ino, &key,
904 BTRFS_FT_DIR, index);
6bdb72de 905 BUG_ON(ret);
0660b5af 906
a22285a6
YZ
907 btrfs_i_size_write(parent_inode, parent_inode->i_size +
908 dentry->d_name.len * 2);
52c26179
YZ
909 ret = btrfs_update_inode(trans, parent_root, parent_inode);
910 BUG_ON(ret);
911
6bdb72de
SW
912 record_root_in_trans(trans, root);
913 btrfs_set_root_last_snapshot(&root->root_item, trans->transid);
914 memcpy(new_root_item, &root->root_item, sizeof(*new_root_item));
915
916 old = btrfs_lock_root_node(root);
917 btrfs_cow_block(trans, root, old, NULL, 0, &old);
918 btrfs_set_lock_blocking(old);
919
920 btrfs_copy_root(trans, root, old, &tmp, objectid);
921 btrfs_tree_unlock(old);
922 free_extent_buffer(old);
923
924 btrfs_set_root_node(new_root_item, tmp);
a22285a6
YZ
925 /* record when the snapshot was created in key.offset */
926 key.offset = trans->transid;
927 ret = btrfs_insert_root(trans, tree_root, &key, new_root_item);
6bdb72de
SW
928 btrfs_tree_unlock(tmp);
929 free_extent_buffer(tmp);
a22285a6 930 BUG_ON(ret);
6bdb72de 931
a22285a6
YZ
932 /*
933 * insert root back/forward references
934 */
935 ret = btrfs_add_root_ref(trans, tree_root, objectid,
0660b5af 936 parent_root->root_key.objectid,
a22285a6
YZ
937 parent_inode->i_ino, index,
938 dentry->d_name.name, dentry->d_name.len);
0660b5af
CM
939 BUG_ON(ret);
940
a22285a6
YZ
941 key.offset = (u64)-1;
942 pending->snap = btrfs_read_fs_root_no_name(root->fs_info, &key);
943 BUG_ON(IS_ERR(pending->snap));
d68fc57b 944
3fd0a558 945 btrfs_reloc_post_snapshot(trans, pending);
d68fc57b 946 btrfs_orphan_post_snapshot(trans, pending);
3063d29f 947fail:
6bdb72de 948 kfree(new_root_item);
a22285a6
YZ
949 btrfs_block_rsv_release(root, &pending->block_rsv, (u64)-1);
950 return 0;
3063d29f
CM
951}
952
d352ac68
CM
953/*
954 * create all the snapshots we've scheduled for creation
955 */
80b6794d
CM
956static noinline int create_pending_snapshots(struct btrfs_trans_handle *trans,
957 struct btrfs_fs_info *fs_info)
3de4586c
CM
958{
959 struct btrfs_pending_snapshot *pending;
960 struct list_head *head = &trans->transaction->pending_snapshots;
3de4586c
CM
961 int ret;
962
c6e30871 963 list_for_each_entry(pending, head, list) {
3de4586c
CM
964 ret = create_pending_snapshot(trans, fs_info, pending);
965 BUG_ON(ret);
966 }
967 return 0;
968}
969
5d4f98a2
YZ
970static void update_super_roots(struct btrfs_root *root)
971{
972 struct btrfs_root_item *root_item;
973 struct btrfs_super_block *super;
974
975 super = &root->fs_info->super_copy;
976
977 root_item = &root->fs_info->chunk_root->root_item;
978 super->chunk_root = root_item->bytenr;
979 super->chunk_root_generation = root_item->generation;
980 super->chunk_root_level = root_item->level;
981
982 root_item = &root->fs_info->tree_root->root_item;
983 super->root = root_item->bytenr;
984 super->generation = root_item->generation;
985 super->root_level = root_item->level;
0af3d00b
JB
986 if (super->cache_generation != 0 || btrfs_test_opt(root, SPACE_CACHE))
987 super->cache_generation = root_item->generation;
5d4f98a2
YZ
988}
989
f36f3042
CM
990int btrfs_transaction_in_commit(struct btrfs_fs_info *info)
991{
992 int ret = 0;
993 spin_lock(&info->new_trans_lock);
994 if (info->running_transaction)
995 ret = info->running_transaction->in_commit;
996 spin_unlock(&info->new_trans_lock);
997 return ret;
998}
999
8929ecfa
YZ
1000int btrfs_transaction_blocked(struct btrfs_fs_info *info)
1001{
1002 int ret = 0;
1003 spin_lock(&info->new_trans_lock);
1004 if (info->running_transaction)
1005 ret = info->running_transaction->blocked;
1006 spin_unlock(&info->new_trans_lock);
1007 return ret;
1008}
1009
79154b1b
CM
1010int btrfs_commit_transaction(struct btrfs_trans_handle *trans,
1011 struct btrfs_root *root)
1012{
15ee9bc7 1013 unsigned long joined = 0;
79154b1b 1014 struct btrfs_transaction *cur_trans;
8fd17795 1015 struct btrfs_transaction *prev_trans = NULL;
79154b1b 1016 DEFINE_WAIT(wait);
15ee9bc7 1017 int ret;
89573b9c
CM
1018 int should_grow = 0;
1019 unsigned long now = get_seconds();
dccae999 1020 int flush_on_commit = btrfs_test_opt(root, FLUSHONCOMMIT);
79154b1b 1021
5a3f23d5
CM
1022 btrfs_run_ordered_operations(root, 0);
1023
56bec294
CM
1024 /* make a pass through all the delayed refs we have so far
1025 * any runnings procs may add more while we are here
1026 */
1027 ret = btrfs_run_delayed_refs(trans, root, 0);
1028 BUG_ON(ret);
1029
a22285a6
YZ
1030 btrfs_trans_release_metadata(trans, root);
1031
b7ec40d7 1032 cur_trans = trans->transaction;
56bec294
CM
1033 /*
1034 * set the flushing flag so procs in this transaction have to
1035 * start sending their work down.
1036 */
b7ec40d7 1037 cur_trans->delayed_refs.flushing = 1;
56bec294 1038
c3e69d58 1039 ret = btrfs_run_delayed_refs(trans, root, 0);
56bec294
CM
1040 BUG_ON(ret);
1041
79154b1b 1042 mutex_lock(&root->fs_info->trans_mutex);
b7ec40d7
CM
1043 if (cur_trans->in_commit) {
1044 cur_trans->use_count++;
ccd467d6 1045 mutex_unlock(&root->fs_info->trans_mutex);
79154b1b 1046 btrfs_end_transaction(trans, root);
ccd467d6 1047
79154b1b
CM
1048 ret = wait_for_commit(root, cur_trans);
1049 BUG_ON(ret);
15ee9bc7
JB
1050
1051 mutex_lock(&root->fs_info->trans_mutex);
79154b1b 1052 put_transaction(cur_trans);
15ee9bc7
JB
1053 mutex_unlock(&root->fs_info->trans_mutex);
1054
79154b1b
CM
1055 return 0;
1056 }
4313b399 1057
2c90e5d6 1058 trans->transaction->in_commit = 1;
f9295749 1059 trans->transaction->blocked = 1;
ccd467d6
CM
1060 if (cur_trans->list.prev != &root->fs_info->trans_list) {
1061 prev_trans = list_entry(cur_trans->list.prev,
1062 struct btrfs_transaction, list);
1063 if (!prev_trans->commit_done) {
1064 prev_trans->use_count++;
ccd467d6
CM
1065 mutex_unlock(&root->fs_info->trans_mutex);
1066
1067 wait_for_commit(root, prev_trans);
ccd467d6 1068
ccd467d6 1069 mutex_lock(&root->fs_info->trans_mutex);
15ee9bc7 1070 put_transaction(prev_trans);
ccd467d6
CM
1071 }
1072 }
15ee9bc7 1073
89573b9c
CM
1074 if (now < cur_trans->start_time || now - cur_trans->start_time < 1)
1075 should_grow = 1;
1076
15ee9bc7 1077 do {
7ea394f1 1078 int snap_pending = 0;
15ee9bc7 1079 joined = cur_trans->num_joined;
7ea394f1
YZ
1080 if (!list_empty(&trans->transaction->pending_snapshots))
1081 snap_pending = 1;
1082
2c90e5d6 1083 WARN_ON(cur_trans != trans->transaction);
79154b1b 1084 mutex_unlock(&root->fs_info->trans_mutex);
15ee9bc7 1085
0bdb1db2 1086 if (flush_on_commit || snap_pending) {
24bbcf04
YZ
1087 btrfs_start_delalloc_inodes(root, 1);
1088 ret = btrfs_wait_ordered_extents(root, 0, 1);
ebecd3d9 1089 BUG_ON(ret);
7ea394f1
YZ
1090 }
1091
5a3f23d5
CM
1092 /*
1093 * rename don't use btrfs_join_transaction, so, once we
1094 * set the transaction to blocked above, we aren't going
1095 * to get any new ordered operations. We can safely run
1096 * it here and no for sure that nothing new will be added
1097 * to the list
1098 */
1099 btrfs_run_ordered_operations(root, 1);
1100
ed3b3d31
CM
1101 prepare_to_wait(&cur_trans->writer_wait, &wait,
1102 TASK_UNINTERRUPTIBLE);
1103
89573b9c 1104 smp_mb();
99d16cbc
SW
1105 if (cur_trans->num_writers > 1)
1106 schedule_timeout(MAX_SCHEDULE_TIMEOUT);
1107 else if (should_grow)
1108 schedule_timeout(1);
15ee9bc7 1109
79154b1b 1110 mutex_lock(&root->fs_info->trans_mutex);
15ee9bc7
JB
1111 finish_wait(&cur_trans->writer_wait, &wait);
1112 } while (cur_trans->num_writers > 1 ||
89573b9c 1113 (should_grow && cur_trans->num_joined != joined));
15ee9bc7 1114
3063d29f
CM
1115 ret = create_pending_snapshots(trans, root->fs_info);
1116 BUG_ON(ret);
1117
56bec294
CM
1118 ret = btrfs_run_delayed_refs(trans, root, (unsigned long)-1);
1119 BUG_ON(ret);
1120
2c90e5d6 1121 WARN_ON(cur_trans != trans->transaction);
dc17ff8f 1122
e02119d5
CM
1123 /* btrfs_commit_tree_roots is responsible for getting the
1124 * various roots consistent with each other. Every pointer
1125 * in the tree of tree roots has to point to the most up to date
1126 * root for every subvolume and other tree. So, we have to keep
1127 * the tree logging code from jumping in and changing any
1128 * of the trees.
1129 *
1130 * At this point in the commit, there can't be any tree-log
1131 * writers, but a little lower down we drop the trans mutex
1132 * and let new people in. By holding the tree_log_mutex
1133 * from now until after the super is written, we avoid races
1134 * with the tree-log code.
1135 */
1136 mutex_lock(&root->fs_info->tree_log_mutex);
1137
5d4f98a2 1138 ret = commit_fs_roots(trans, root);
54aa1f4d
CM
1139 BUG_ON(ret);
1140
5d4f98a2 1141 /* commit_fs_roots gets rid of all the tree log roots, it is now
e02119d5
CM
1142 * safe to free the root of tree log roots
1143 */
1144 btrfs_free_log_root_tree(trans, root->fs_info);
1145
5d4f98a2 1146 ret = commit_cowonly_roots(trans, root);
79154b1b 1147 BUG_ON(ret);
54aa1f4d 1148
11833d66
YZ
1149 btrfs_prepare_extent_commit(trans, root);
1150
78fae27e 1151 cur_trans = root->fs_info->running_transaction;
cee36a03 1152 spin_lock(&root->fs_info->new_trans_lock);
78fae27e 1153 root->fs_info->running_transaction = NULL;
cee36a03 1154 spin_unlock(&root->fs_info->new_trans_lock);
5d4f98a2
YZ
1155
1156 btrfs_set_root_node(&root->fs_info->tree_root->root_item,
1157 root->fs_info->tree_root->node);
817d52f8 1158 switch_commit_root(root->fs_info->tree_root);
5d4f98a2
YZ
1159
1160 btrfs_set_root_node(&root->fs_info->chunk_root->root_item,
1161 root->fs_info->chunk_root->node);
817d52f8 1162 switch_commit_root(root->fs_info->chunk_root);
5d4f98a2
YZ
1163
1164 update_super_roots(root);
e02119d5
CM
1165
1166 if (!root->fs_info->log_root_recovering) {
1167 btrfs_set_super_log_root(&root->fs_info->super_copy, 0);
1168 btrfs_set_super_log_root_level(&root->fs_info->super_copy, 0);
1169 }
1170
a061fc8d
CM
1171 memcpy(&root->fs_info->super_for_commit, &root->fs_info->super_copy,
1172 sizeof(root->fs_info->super_copy));
ccd467d6 1173
f9295749 1174 trans->transaction->blocked = 0;
b7ec40d7 1175
f9295749 1176 wake_up(&root->fs_info->transaction_wait);
e6dcd2dc 1177
78fae27e 1178 mutex_unlock(&root->fs_info->trans_mutex);
79154b1b
CM
1179 ret = btrfs_write_and_wait_transaction(trans, root);
1180 BUG_ON(ret);
a512bbf8 1181 write_ctree_super(trans, root, 0);
4313b399 1182
e02119d5
CM
1183 /*
1184 * the super is written, we can safely allow the tree-loggers
1185 * to go about their business
1186 */
1187 mutex_unlock(&root->fs_info->tree_log_mutex);
1188
11833d66 1189 btrfs_finish_extent_commit(trans, root);
4313b399 1190
1a40e23b
ZY
1191 mutex_lock(&root->fs_info->trans_mutex);
1192
2c90e5d6 1193 cur_trans->commit_done = 1;
b7ec40d7 1194
15ee9bc7 1195 root->fs_info->last_trans_committed = cur_trans->transid;
817d52f8 1196
2c90e5d6 1197 wake_up(&cur_trans->commit_wait);
3de4586c 1198
78fae27e 1199 put_transaction(cur_trans);
79154b1b 1200 put_transaction(cur_trans);
58176a96 1201
78fae27e 1202 mutex_unlock(&root->fs_info->trans_mutex);
3de4586c 1203
9ed74f2d
JB
1204 if (current->journal_info == trans)
1205 current->journal_info = NULL;
1206
2c90e5d6 1207 kmem_cache_free(btrfs_trans_handle_cachep, trans);
24bbcf04
YZ
1208
1209 if (current != root->fs_info->transaction_kthread)
1210 btrfs_run_delayed_iputs(root);
1211
79154b1b
CM
1212 return ret;
1213}
1214
d352ac68
CM
1215/*
1216 * interface function to delete all the snapshots we have scheduled for deletion
1217 */
e9d0b13b
CM
1218int btrfs_clean_old_snapshots(struct btrfs_root *root)
1219{
5d4f98a2
YZ
1220 LIST_HEAD(list);
1221 struct btrfs_fs_info *fs_info = root->fs_info;
1222
1223 mutex_lock(&fs_info->trans_mutex);
1224 list_splice_init(&fs_info->dead_roots, &list);
1225 mutex_unlock(&fs_info->trans_mutex);
e9d0b13b 1226
5d4f98a2
YZ
1227 while (!list_empty(&list)) {
1228 root = list_entry(list.next, struct btrfs_root, root_list);
76dda93c
YZ
1229 list_del(&root->root_list);
1230
1231 if (btrfs_header_backref_rev(root->node) <
1232 BTRFS_MIXED_BACKREF_REV)
3fd0a558 1233 btrfs_drop_snapshot(root, NULL, 0);
76dda93c 1234 else
3fd0a558 1235 btrfs_drop_snapshot(root, NULL, 1);
e9d0b13b
CM
1236 }
1237 return 0;
1238}