20 #include <linux/slab.h>
21 #include <linux/sched.h>
25 #include <linux/uuid.h>
34 #define BTRFS_ROOT_TRANS_TAG 0
42 memset(transaction, 0,
sizeof(*transaction));
150 "creating a fresh transaction\n");
155 "creating a fresh transaction\n");
201 spin_lock(&root->
fs_info->fs_roots_radix_lock);
203 spin_unlock(&root->
fs_info->fs_roots_radix_lock);
207 (
unsigned long)root->
root_key.objectid,
209 spin_unlock(&root->
fs_info->fs_roots_radix_lock);
255 record_root_in_trans(trans, root);
265 static void wait_current_trans(
struct btrfs_root *root)
269 spin_lock(&root->
fs_info->trans_lock);
270 cur_trans = root->
fs_info->running_transaction;
271 if (cur_trans && cur_trans->
blocked) {
273 spin_unlock(&root->
fs_info->trans_lock);
279 spin_unlock(&root->
fs_info->trans_lock);
283 static int may_wait_transaction(
struct btrfs_root *root,
int type)
285 if (root->
fs_info->log_root_recovering)
299 u64 num_items,
int type,
306 u64 qgroup_reserved = 0;
309 return ERR_PTR(-
EROFS);
324 if (num_items > 0 && root != root->
fs_info->chunk_root) {
325 if (root->
fs_info->quota_enabled &&
326 is_fstree(root->
root_key.objectid)) {
327 qgroup_reserved = num_items * root->
leafsize;
333 num_bytes = btrfs_calc_trans_metadata_size(root, num_items);
336 &root->
fs_info->trans_block_rsv,
340 &root->
fs_info->trans_block_rsv,
361 sb_start_intwrite(root->
fs_info->sb);
363 if (may_wait_transaction(root, type))
364 wait_current_trans(root);
367 ret = join_transaction(root, type);
369 wait_current_trans(root);
370 }
while (ret == -
EBUSY);
377 sb_end_intwrite(root->
fs_info->sb);
382 cur_trans = root->
fs_info->running_transaction;
402 if (cur_trans->
blocked && may_wait_transaction(root, type)) {
408 trace_btrfs_space_reservation(root->
fs_info,
"transaction",
425 return start_transaction(root, num_items,
TRANS_START, 0);
431 return start_transaction(root, num_items,
TRANS_START, 1);
436 return start_transaction(root, 0,
TRANS_JOIN, 0);
472 spin_lock(&root->
fs_info->trans_lock);
474 if (t->transid == transid) {
479 if (t->transid > transid)
482 spin_unlock(&root->
fs_info->trans_lock);
488 spin_lock(&root->
fs_info->trans_lock);
499 spin_unlock(&root->
fs_info->trans_lock);
504 wait_for_commit(root, cur_trans);
515 wait_current_trans(root);
546 return should_end_transaction(trans, root);
581 if (!list_empty(&trans->
new_bgs))
588 trans->
transaction->delayed_refs.num_heads_ready > 64) {
599 if (!list_empty(&trans->
new_bgs))
603 should_end_transaction(trans, root)) {
623 sb_end_intwrite(root->
fs_info->sb);
634 if (
current->journal_info == trans)
646 memset(trans, 0,
sizeof(*trans));
656 ret = __btrfs_end_transaction(trans, root, 0);
667 ret = __btrfs_end_transaction(trans, root, 1);
676 return __btrfs_end_transaction(trans, root, 1);
695 mark, &cached_state)) {
766 struct inode *btree_inode;
767 btree_inode = root->
fs_info->btree_inode;
793 old_root_used = btrfs_root_used(&root->
root_item);
797 old_root_bytenr = btrfs_root_bytenr(&root->
root_item);
798 if (old_root_bytenr == root->
node->start &&
799 old_root_used == btrfs_root_used(&root->
root_item))
809 old_root_used = btrfs_root_used(&root->
root_item);
815 if (root != root->
fs_info->extent_root)
816 switch_commit_root(root);
868 ret = update_cowonly_root(trans, root);
887 spin_lock(&root->
fs_info->trans_lock);
889 spin_unlock(&root->
fs_info->trans_lock);
913 for (i = 0; i <
ret; i++) {
916 (
unsigned long)root->
root_key.objectid,
932 switch_commit_root(root);
969 return PTR_ERR(trans);
999 struct inode *parent_inode;
1017 goto path_alloc_fail;
1021 if (!new_root_item) {
1023 goto root_item_alloc_fail;
1029 goto no_free_objectid;
1034 if (to_reserve > 0) {
1039 goto no_free_objectid;
1047 goto no_free_objectid;
1057 dentry = pending->
dentry;
1059 parent_inode = parent->
d_inode;
1060 parent_root = BTRFS_I(parent_inode)->root;
1061 record_root_in_trans(trans, parent_root);
1071 btrfs_ino(parent_inode),
1074 if (dir_item !=
NULL && !IS_ERR(dir_item)) {
1077 }
else if (IS_ERR(dir_item)) {
1078 ret = PTR_ERR(dir_item);
1096 record_root_in_trans(trans, root);
1101 root_flags = btrfs_root_flags(new_root_item);
1106 btrfs_set_root_flags(new_root_item, root_flags);
1108 btrfs_set_root_generation_v2(new_root_item,
1116 btrfs_set_root_otransid(new_root_item, trans->
transid);
1119 btrfs_set_root_stransid(new_root_item, 0);
1120 btrfs_set_root_rtransid(new_root_item, 0);
1131 btrfs_set_lock_blocking(old);
1162 btrfs_ino(parent_inode), index,
1171 if (IS_ERR(pending->
snap)) {
1172 ret = PTR_ERR(pending->
snap);
1200 btrfs_i_size_write(parent_inode, parent_inode->
i_size +
1210 kfree(new_root_item);
1211 root_item_alloc_fail:
1228 create_pending_snapshot(trans, fs_info, pending);
1237 super = root->fs_info->super_copy;
1239 root_item = &root->fs_info->chunk_root->root_item;
1244 root_item = &root->fs_info->tree_root->root_item;
1276 static void wait_current_trans_commit_start(
struct btrfs_root *root,
1286 static void wait_current_trans_commit_start_and_unblock(
struct btrfs_root *root,
1324 int wait_for_unblock)
1358 if (wait_for_unblock)
1359 wait_current_trans_commit_start_and_unblock(root, cur_trans);
1361 wait_current_trans_commit_start(root, cur_trans);
1363 if (
current->journal_info == trans)
1380 spin_lock(&root->
fs_info->trans_lock);
1381 list_del_init(&cur_trans->
list);
1382 if (cur_trans == root->
fs_info->running_transaction) {
1384 root->
fs_info->trans_no_join = 0;
1386 spin_unlock(&root->
fs_info->trans_lock);
1393 trace_btrfs_transaction_commit(root);
1397 if (
current->journal_info == trans)
1413 unsigned long joined = 0;
1418 int should_grow = 0;
1425 goto cleanup_transaction;
1432 goto cleanup_transaction;
1445 if (!list_empty(&trans->
new_bgs))
1450 goto cleanup_transaction;
1458 wait_for_commit(root, cur_trans);
1470 spin_lock(&root->
fs_info->trans_lock);
1471 if (cur_trans->
list.prev != &root->
fs_info->trans_list) {
1476 spin_unlock(&root->
fs_info->trans_lock);
1478 wait_for_commit(root, prev_trans);
1482 spin_unlock(&root->
fs_info->trans_lock);
1485 spin_unlock(&root->
fs_info->trans_lock);
1493 int snap_pending = 0;
1496 if (!list_empty(&trans->
transaction->pending_snapshots))
1501 if (flush_on_commit || snap_pending) {
1508 goto cleanup_transaction;
1531 else if (should_grow)
1536 (should_grow && cur_trans->
num_joined != joined));
1543 spin_lock(&root->
fs_info->trans_lock);
1544 root->
fs_info->trans_no_join = 1;
1545 spin_unlock(&root->
fs_info->trans_lock);
1561 ret = create_pending_snapshots(trans, root->
fs_info);
1564 goto cleanup_transaction;
1580 goto cleanup_transaction;
1586 goto cleanup_transaction;
1613 ret = commit_fs_roots(trans, root);
1617 goto cleanup_transaction;
1625 ret = commit_cowonly_roots(trans, root);
1629 goto cleanup_transaction;
1634 cur_trans = root->
fs_info->running_transaction;
1637 root->
fs_info->tree_root->node);
1638 switch_commit_root(root->
fs_info->tree_root);
1641 root->
fs_info->chunk_root->node);
1642 switch_commit_root(root->
fs_info->chunk_root);
1645 update_super_roots(root);
1647 if (!root->
fs_info->log_root_recovering) {
1648 btrfs_set_super_log_root(root->
fs_info->super_copy, 0);
1649 btrfs_set_super_log_root_level(root->
fs_info->super_copy, 0);
1653 sizeof(*root->
fs_info->super_copy));
1656 spin_lock(&root->
fs_info->trans_lock);
1658 root->
fs_info->trans_no_join = 0;
1659 spin_unlock(&root->
fs_info->trans_lock);
1667 "Error while writing out transaction.");
1669 goto cleanup_transaction;
1675 goto cleanup_transaction;
1692 spin_lock(&root->
fs_info->trans_lock);
1693 list_del_init(&cur_trans->
list);
1694 spin_unlock(&root->
fs_info->trans_lock);
1700 sb_end_intwrite(root->
fs_info->sb);
1702 trace_btrfs_transaction_commit(root);
1706 if (
current->journal_info == trans)
1716 cleanup_transaction:
1719 btrfs_printk(root->
fs_info,
"Skipping commit of aborted transaction.\n");
1721 if (
current->journal_info == trans)
1723 cleanup_transaction(trans, root, ret);
1740 while (!list_empty(&
list)) {
1748 if (btrfs_header_backref_rev(root->
node) <