aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorWang Shilong <wangsl.fnst@cn.fujitsu.com>2014-04-23 07:33:35 -0400
committerChris Mason <clm@fb.com>2014-04-24 19:43:32 -0400
commit28c16cbbc32781224309e50cc99c684f2498bc59 (patch)
tree5dab03fd6e797956a396bb231fc7e2e136cd69b9 /fs
parente60efa84252c059bde5f65fccc6af94478d39e3b (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.c10
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) {