Skip to content

Commit

Permalink
Btrfs: destroy the items of the delayed inodes in error handling routine
Browse files Browse the repository at this point in the history
the items of the delayed inodes were forgotten to be freed, this patch
fixes it.

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
  • Loading branch information
Miao Xie authored and Chris Mason committed Jun 15, 2012
1 parent ed0eaa1 commit 67cde34
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 0 deletions.
18 changes: 18 additions & 0 deletions fs/btrfs/delayed-inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -1879,3 +1879,21 @@ void btrfs_kill_all_delayed_nodes(struct btrfs_root *root)
}
}
}

void btrfs_destroy_delayed_inodes(struct btrfs_root *root)
{
struct btrfs_delayed_root *delayed_root;
struct btrfs_delayed_node *curr_node, *prev_node;

delayed_root = btrfs_get_delayed_root(root);

curr_node = btrfs_first_delayed_node(delayed_root);
while (curr_node) {
__btrfs_kill_delayed_node(curr_node);

prev_node = curr_node;
curr_node = btrfs_next_delayed_node(curr_node);
btrfs_release_delayed_node(prev_node);
}
}

3 changes: 3 additions & 0 deletions fs/btrfs/delayed-inode.h
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,9 @@ int btrfs_fill_inode(struct inode *inode, u32 *rdev);
/* Used for drop dead root */
void btrfs_kill_all_delayed_nodes(struct btrfs_root *root);

/* Used for clean the transaction */
void btrfs_destroy_delayed_inodes(struct btrfs_root *root);

/* Used for readdir() */
void btrfs_get_delayed_items(struct inode *inode, struct list_head *ins_list,
struct list_head *del_list);
Expand Down
6 changes: 6 additions & 0 deletions fs/btrfs/disk-io.c
Original file line number Diff line number Diff line change
Expand Up @@ -3608,6 +3608,9 @@ void btrfs_cleanup_one_transaction(struct btrfs_transaction *cur_trans,
cur_trans->commit_done = 1;
wake_up(&cur_trans->commit_wait);

btrfs_destroy_delayed_inodes(root);
btrfs_assert_delayed_root_empty(root);

btrfs_destroy_pending_snapshots(cur_trans);

btrfs_destroy_marked_extents(root, &cur_trans->dirty_pages,
Expand Down Expand Up @@ -3662,6 +3665,9 @@ int btrfs_cleanup_transaction(struct btrfs_root *root)
if (waitqueue_active(&t->commit_wait))
wake_up(&t->commit_wait);

btrfs_destroy_delayed_inodes(root);
btrfs_assert_delayed_root_empty(root);

btrfs_destroy_pending_snapshots(t);

btrfs_destroy_delalloc_inodes(root);
Expand Down

0 comments on commit 67cde34

Please sign in to comment.