Skip to content

Commit

Permalink
Btrfs: don't save the inode cache if we are deleting this root
Browse files Browse the repository at this point in the history
With xfstest 254 I can panic the box every time with the inode number caching
stuff on.  This is because we clean the inodes out when we delete the subvolume,
but then we write out the inode cache which adds an inode to the subvolume inode
tree, and then when it gets evicted again the root gets added back on the dead
roots list and is deleted again, so we have a double free.  To stop this from
happening just return 0 if refs is 0 (and we're not the tree root since tree
root always has refs of 0).  With this fix 254 no longer panics.  Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
Tested-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
  • Loading branch information
Josef Bacik authored and Chris Mason committed Jun 4, 2011
1 parent 5f3f302 commit d132a53
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions fs/btrfs/inode-map.c
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,11 @@ int btrfs_save_ino_cache(struct btrfs_root *root,
root->root_key.objectid > BTRFS_LAST_FREE_OBJECTID))
return 0;

/* Don't save inode cache if we are deleting this root */
if (btrfs_root_refs(&root->root_item) == 0 &&
root != root->fs_info->tree_root)
return 0;

path = btrfs_alloc_path();
if (!path)
return -ENOMEM;
Expand Down

0 comments on commit d132a53

Please sign in to comment.