diff options
Diffstat (limited to 'fs/ext4/mballoc.c')
-rw-r--r-- | fs/ext4/mballoc.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index a888cac76e9c..c8238a26818c 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c | |||
@@ -989,7 +989,7 @@ static int ext4_mb_get_buddy_page_lock(struct super_block *sb, | |||
989 | poff = block % blocks_per_page; | 989 | poff = block % blocks_per_page; |
990 | page = find_or_create_page(inode->i_mapping, pnum, GFP_NOFS); | 990 | page = find_or_create_page(inode->i_mapping, pnum, GFP_NOFS); |
991 | if (!page) | 991 | if (!page) |
992 | return -EIO; | 992 | return -ENOMEM; |
993 | BUG_ON(page->mapping != inode->i_mapping); | 993 | BUG_ON(page->mapping != inode->i_mapping); |
994 | e4b->bd_bitmap_page = page; | 994 | e4b->bd_bitmap_page = page; |
995 | e4b->bd_bitmap = page_address(page) + (poff * sb->s_blocksize); | 995 | e4b->bd_bitmap = page_address(page) + (poff * sb->s_blocksize); |
@@ -1003,7 +1003,7 @@ static int ext4_mb_get_buddy_page_lock(struct super_block *sb, | |||
1003 | pnum = block / blocks_per_page; | 1003 | pnum = block / blocks_per_page; |
1004 | page = find_or_create_page(inode->i_mapping, pnum, GFP_NOFS); | 1004 | page = find_or_create_page(inode->i_mapping, pnum, GFP_NOFS); |
1005 | if (!page) | 1005 | if (!page) |
1006 | return -EIO; | 1006 | return -ENOMEM; |
1007 | BUG_ON(page->mapping != inode->i_mapping); | 1007 | BUG_ON(page->mapping != inode->i_mapping); |
1008 | e4b->bd_buddy_page = page; | 1008 | e4b->bd_buddy_page = page; |
1009 | return 0; | 1009 | return 0; |
@@ -1168,7 +1168,11 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group, | |||
1168 | unlock_page(page); | 1168 | unlock_page(page); |
1169 | } | 1169 | } |
1170 | } | 1170 | } |
1171 | if (page == NULL || !PageUptodate(page)) { | 1171 | if (page == NULL) { |
1172 | ret = -ENOMEM; | ||
1173 | goto err; | ||
1174 | } | ||
1175 | if (!PageUptodate(page)) { | ||
1172 | ret = -EIO; | 1176 | ret = -EIO; |
1173 | goto err; | 1177 | goto err; |
1174 | } | 1178 | } |
@@ -1197,7 +1201,11 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group, | |||
1197 | unlock_page(page); | 1201 | unlock_page(page); |
1198 | } | 1202 | } |
1199 | } | 1203 | } |
1200 | if (page == NULL || !PageUptodate(page)) { | 1204 | if (page == NULL) { |
1205 | ret = -ENOMEM; | ||
1206 | goto err; | ||
1207 | } | ||
1208 | if (!PageUptodate(page)) { | ||
1201 | ret = -EIO; | 1209 | ret = -EIO; |
1202 | goto err; | 1210 | goto err; |
1203 | } | 1211 | } |
@@ -5008,6 +5016,8 @@ error_return: | |||
5008 | */ | 5016 | */ |
5009 | static int ext4_trim_extent(struct super_block *sb, int start, int count, | 5017 | static int ext4_trim_extent(struct super_block *sb, int start, int count, |
5010 | ext4_group_t group, struct ext4_buddy *e4b) | 5018 | ext4_group_t group, struct ext4_buddy *e4b) |
5019 | __releases(bitlock) | ||
5020 | __acquires(bitlock) | ||
5011 | { | 5021 | { |
5012 | struct ext4_free_extent ex; | 5022 | struct ext4_free_extent ex; |
5013 | int ret = 0; | 5023 | int ret = 0; |