diff options
Diffstat (limited to 'fs/ext2')
| -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 | ||
