diff options
author | Wang Shilong <wangsl.fnst@cn.fujitsu.com> | 2014-04-23 07:33:35 -0400 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-04-24 19:43:32 -0400 |
commit | 28c16cbbc32781224309e50cc99c684f2498bc59 (patch) | |
tree | 5dab03fd6e797956a396bb231fc7e2e136cd69b9 /fs | |
parent | e60efa84252c059bde5f65fccc6af94478d39e3b (diff) |
Btrfs: fix possible memory leaks in open_ctree()
Fix possible memory leaks in the following error handling paths:
read_tree_block()
btrfs_recover_log_trees
btrfs_commit_super()
btrfs_find_orphan_roots()
btrfs_cleanup_fs_roots()
Signed-off-by: Wang Shilong <wangsl.fnst@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/disk-io.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 6d1ac7d46f81..0e4fb4a5c7f0 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -2864,7 +2864,7 @@ retry_root_backup: | |||
2864 | printk(KERN_ERR "BTRFS: failed to read log tree\n"); | 2864 | printk(KERN_ERR "BTRFS: failed to read log tree\n"); |
2865 | free_extent_buffer(log_tree_root->node); | 2865 | free_extent_buffer(log_tree_root->node); |
2866 | kfree(log_tree_root); | 2866 | kfree(log_tree_root); |
2867 | goto fail_trans_kthread; | 2867 | goto fail_qgroup; |
2868 | } | 2868 | } |
2869 | /* returns with log_tree_root freed on success */ | 2869 | /* returns with log_tree_root freed on success */ |
2870 | ret = btrfs_recover_log_trees(log_tree_root); | 2870 | ret = btrfs_recover_log_trees(log_tree_root); |
@@ -2873,24 +2873,24 @@ retry_root_backup: | |||
2873 | "Failed to recover log tree"); | 2873 | "Failed to recover log tree"); |
2874 | free_extent_buffer(log_tree_root->node); | 2874 | free_extent_buffer(log_tree_root->node); |
2875 | kfree(log_tree_root); | 2875 | kfree(log_tree_root); |
2876 | goto fail_trans_kthread; | 2876 | goto fail_qgroup; |
2877 | } | 2877 | } |
2878 | 2878 | ||
2879 | if (sb->s_flags & MS_RDONLY) { | 2879 | if (sb->s_flags & MS_RDONLY) { |
2880 | ret = btrfs_commit_super(tree_root); | 2880 | ret = btrfs_commit_super(tree_root); |
2881 | if (ret) | 2881 | if (ret) |
2882 | goto fail_trans_kthread; | 2882 | goto fail_qgroup; |
2883 | } | 2883 | } |
2884 | } | 2884 | } |
2885 | 2885 | ||
2886 | ret = btrfs_find_orphan_roots(tree_root); | 2886 | ret = btrfs_find_orphan_roots(tree_root); |
2887 | if (ret) | 2887 | if (ret) |
2888 | goto fail_trans_kthread; | 2888 | goto fail_qgroup; |
2889 | 2889 | ||
2890 | if (!(sb->s_flags & MS_RDONLY)) { | 2890 | if (!(sb->s_flags & MS_RDONLY)) { |
2891 | ret = btrfs_cleanup_fs_roots(fs_info); | 2891 | ret = btrfs_cleanup_fs_roots(fs_info); |
2892 | if (ret) | 2892 | if (ret) |
2893 | goto fail_trans_kthread; | 2893 | goto fail_qgroup; |
2894 | 2894 | ||
2895 | ret = btrfs_recover_relocation(tree_root); | 2895 | ret = btrfs_recover_relocation(tree_root); |
2896 | if (ret < 0) { | 2896 | if (ret < 0) { |