Since tree log blocks get freed every transaction, they never really
need to be written to disk. This skips the step where we update
metadata to record they were allocated.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
WARN_ON(btrfs_header_level(eb) != 0);
WARN_ON(btrfs_header_nritems(eb) != 0);
WARN_ON(btrfs_header_level(eb) != 0);
WARN_ON(btrfs_header_nritems(eb) != 0);
- ret = btrfs_free_extent(trans, fs_info->tree_root,
- eb->start, eb->len,
- BTRFS_TREE_LOG_OBJECTID, 0, 0, 0, 1);
+ ret = btrfs_free_reserved_extent(fs_info->tree_root,
+ eb->start, eb->len);
BUG_ON(ret);
free_extent_buffer(eb);
BUG_ON(ret);
free_extent_buffer(eb);
return 0;
}
/* if metadata always pin */
return 0;
}
/* if metadata always pin */
- if (owner_objectid < BTRFS_FIRST_FREE_OBJECTID)
+ if (owner_objectid < BTRFS_FIRST_FREE_OBJECTID) {
+ if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID) {
+ /* btrfs_free_reserved_extent */
+ set_extent_dirty(&root->fs_info->free_space_cache,
+ bytenr, bytenr + num_bytes - 1, GFP_NOFS);
+ return 0;
+ }
/* if data pin when any transaction has committed this */
if (ref_generation != trans->transid)
/* if data pin when any transaction has committed this */
if (ref_generation != trans->transid)
min_alloc_size, empty_size, hint_byte,
search_end, ins, data);
BUG_ON(ret);
min_alloc_size, empty_size, hint_byte,
search_end, ins, data);
BUG_ON(ret);
- ret = __btrfs_alloc_reserved_extent(trans, root, root_objectid,
- ref_generation, owner,
- owner_offset, ins);
- BUG_ON(ret);
+ if (root_objectid != BTRFS_TREE_LOG_OBJECTID) {
+ ret = __btrfs_alloc_reserved_extent(trans, root, root_objectid,
+ ref_generation, owner,
+ owner_offset, ins);
+ BUG_ON(ret);
maybe_unlock_mutex(root);
return ret;
}
maybe_unlock_mutex(root);
return ret;
}
WARN_ON(root_owner !=
BTRFS_TREE_LOG_OBJECTID);
WARN_ON(root_owner !=
BTRFS_TREE_LOG_OBJECTID);
- ret = btrfs_free_extent(trans, root, bytenr,
- blocksize, root_owner,
- root_gen, 0, 0, 1);
+ ret = btrfs_free_reserved_extent(root,
+ bytenr, blocksize);
BUG_ON(ret);
}
free_extent_buffer(next);
BUG_ON(ret);
}
free_extent_buffer(next);
BUG_ON(ret);
}
WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
BUG_ON(ret);
}
WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
- ret = btrfs_free_extent(trans, root, bytenr, blocksize,
- root_owner, root_gen, 0, 0, 1);
+ ret = btrfs_free_reserved_extent(root, bytenr, blocksize);
BUG_ON(ret);
}
free_extent_buffer(path->nodes[*level]);
BUG_ON(ret);
}
free_extent_buffer(path->nodes[*level]);
}
WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
}
WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
- ret = btrfs_free_extent(trans, root,
+ ret = btrfs_free_reserved_extent(root,
path->nodes[*level]->start,
path->nodes[*level]->start,
- path->nodes[*level]->len,
- root_owner, root_gen, 0, 0, 1);
+ path->nodes[*level]->len);
BUG_ON(ret);
}
free_extent_buffer(path->nodes[*level]);
BUG_ON(ret);
}
free_extent_buffer(path->nodes[*level]);
}
WARN_ON(log->root_key.objectid !=
BTRFS_TREE_LOG_OBJECTID);
}
WARN_ON(log->root_key.objectid !=
BTRFS_TREE_LOG_OBJECTID);
- ret = btrfs_free_extent(trans, log,
- next->start, next->len,
- log->root_key.objectid,
- btrfs_header_generation(next),
- 0, 0, 1);
+ ret = btrfs_free_reserved_extent(log, next->start,
+ next->len);