diff options
Diffstat (limited to 'fs/btrfs/super.c')
| -rw-r--r-- | fs/btrfs/super.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index aadc02374b2a..430e7419349c 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -2068,7 +2068,13 @@ static int btrfs_get_tree_subvol(struct fs_context *fc)  	fs_info->super_copy = kzalloc(BTRFS_SUPER_INFO_SIZE, GFP_KERNEL);  	fs_info->super_for_commit = kzalloc(BTRFS_SUPER_INFO_SIZE, GFP_KERNEL);  	if (!fs_info->super_copy || !fs_info->super_for_commit) { -		btrfs_free_fs_info(fs_info); +		/* +		 * Dont call btrfs_free_fs_info() to free it as it's still +		 * initialized partially. +		 */ +		kfree(fs_info->super_copy); +		kfree(fs_info->super_for_commit); +		kvfree(fs_info);  		return -ENOMEM;  	}  	btrfs_init_fs_info(fs_info);  | 
