Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 253817
b: refs/heads/master
c: 19fd294
h: refs/heads/master
i:
  253815: bc411f3
v: v3
  • Loading branch information
Miao Xie authored and Chris Mason committed Jun 17, 2011
1 parent 11834c5 commit 2a8bf28
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9fe6a50fb764f508dd2de47a66e62e51388791fb
refs/heads/master: 19fd294957e426bfdd8e19085096467ec18df5c4
25 changes: 20 additions & 5 deletions trunk/fs/btrfs/delayed-inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,6 @@ struct btrfs_delayed_item *btrfs_alloc_delayed_item(u32 data_len)
item->data_len = data_len;
item->ins_or_del = 0;
item->bytes_reserved = 0;
item->block_rsv = NULL;
item->delayed_node = NULL;
atomic_set(&item->refs, 1);
}
Expand Down Expand Up @@ -593,21 +592,22 @@ static int btrfs_delayed_item_reserve_metadata(struct btrfs_trans_handle *trans,

num_bytes = btrfs_calc_trans_metadata_size(root, 1);
ret = btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes);
if (!ret) {
if (!ret)
item->bytes_reserved = num_bytes;
item->block_rsv = dst_rsv;
}

return ret;
}

static void btrfs_delayed_item_release_metadata(struct btrfs_root *root,
struct btrfs_delayed_item *item)
{
struct btrfs_block_rsv *rsv;

if (!item->bytes_reserved)
return;

btrfs_block_rsv_release(root, item->block_rsv,
rsv = &root->fs_info->global_block_rsv;
btrfs_block_rsv_release(root, rsv,
item->bytes_reserved);
}

Expand Down Expand Up @@ -1014,13 +1014,17 @@ int btrfs_run_delayed_items(struct btrfs_trans_handle *trans,
struct btrfs_delayed_root *delayed_root;
struct btrfs_delayed_node *curr_node, *prev_node;
struct btrfs_path *path;
struct btrfs_block_rsv *block_rsv;
int ret = 0;

path = btrfs_alloc_path();
if (!path)
return -ENOMEM;
path->leave_spinning = 1;

block_rsv = trans->block_rsv;
trans->block_rsv = &root->fs_info->global_block_rsv;

delayed_root = btrfs_get_delayed_root(root);

curr_node = btrfs_first_delayed_node(delayed_root);
Expand All @@ -1045,27 +1049,33 @@ int btrfs_run_delayed_items(struct btrfs_trans_handle *trans,
}

btrfs_free_path(path);
trans->block_rsv = block_rsv;
return ret;
}

static int __btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans,
struct btrfs_delayed_node *node)
{
struct btrfs_path *path;
struct btrfs_block_rsv *block_rsv;
int ret;

path = btrfs_alloc_path();
if (!path)
return -ENOMEM;
path->leave_spinning = 1;

block_rsv = trans->block_rsv;
trans->block_rsv = &node->root->fs_info->global_block_rsv;

ret = btrfs_insert_delayed_items(trans, path, node->root, node);
if (!ret)
ret = btrfs_delete_delayed_items(trans, path, node->root, node);
if (!ret)
ret = btrfs_update_delayed_inode(trans, node->root, path, node);
btrfs_free_path(path);

trans->block_rsv = block_rsv;
return ret;
}

Expand Down Expand Up @@ -1116,6 +1126,7 @@ static void btrfs_async_run_delayed_node_done(struct btrfs_work *work)
struct btrfs_path *path;
struct btrfs_delayed_node *delayed_node = NULL;
struct btrfs_root *root;
struct btrfs_block_rsv *block_rsv;
unsigned long nr = 0;
int need_requeue = 0;
int ret;
Expand All @@ -1134,6 +1145,9 @@ static void btrfs_async_run_delayed_node_done(struct btrfs_work *work)
if (IS_ERR(trans))
goto free_path;

block_rsv = trans->block_rsv;
trans->block_rsv = &root->fs_info->global_block_rsv;

ret = btrfs_insert_delayed_items(trans, path, root, delayed_node);
if (!ret)
ret = btrfs_delete_delayed_items(trans, path, root,
Expand Down Expand Up @@ -1176,6 +1190,7 @@ static void btrfs_async_run_delayed_node_done(struct btrfs_work *work)

nr = trans->blocks_used;

trans->block_rsv = block_rsv;
btrfs_end_transaction_dmeta(trans, root);
__btrfs_btree_balance_dirty(root, nr);
free_path:
Expand Down
1 change: 0 additions & 1 deletion trunk/fs/btrfs/delayed-inode.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ struct btrfs_delayed_item {
struct list_head tree_list; /* used for batch insert/delete items */
struct list_head readdir_list; /* used for readdir items */
u64 bytes_reserved;
struct btrfs_block_rsv *block_rsv;
struct btrfs_delayed_node *delayed_node;
atomic_t refs;
int ins_or_del;
Expand Down

0 comments on commit 2a8bf28

Please sign in to comment.