diff options
Diffstat (limited to 'fs/ext2/super.c')
-rw-r--r-- | fs/ext2/super.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/ext2/super.c b/fs/ext2/super.c index 1ec602673ea8..85df87d0f7b7 100644 --- a/fs/ext2/super.c +++ b/fs/ext2/super.c | |||
@@ -747,15 +747,16 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent) | |||
747 | __le32 features; | 747 | __le32 features; |
748 | int err; | 748 | int err; |
749 | 749 | ||
750 | err = -ENOMEM; | ||
750 | sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); | 751 | sbi = kzalloc(sizeof(*sbi), GFP_KERNEL); |
751 | if (!sbi) | 752 | if (!sbi) |
752 | return -ENOMEM; | 753 | goto failed_unlock; |
753 | 754 | ||
754 | sbi->s_blockgroup_lock = | 755 | sbi->s_blockgroup_lock = |
755 | kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL); | 756 | kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL); |
756 | if (!sbi->s_blockgroup_lock) { | 757 | if (!sbi->s_blockgroup_lock) { |
757 | kfree(sbi); | 758 | kfree(sbi); |
758 | return -ENOMEM; | 759 | goto failed_unlock; |
759 | } | 760 | } |
760 | sb->s_fs_info = sbi; | 761 | sb->s_fs_info = sbi; |
761 | sbi->s_sb_block = sb_block; | 762 | sbi->s_sb_block = sb_block; |
@@ -1107,6 +1108,7 @@ failed_sbi: | |||
1107 | sb->s_fs_info = NULL; | 1108 | sb->s_fs_info = NULL; |
1108 | kfree(sbi->s_blockgroup_lock); | 1109 | kfree(sbi->s_blockgroup_lock); |
1109 | kfree(sbi); | 1110 | kfree(sbi); |
1111 | failed_unlock: | ||
1110 | return ret; | 1112 | return ret; |
1111 | } | 1113 | } |
1112 | 1114 | ||