ext4: add error processing when calling ext4_mb_init_cache in mballoc
PATCH 1/1 ext4: add error processing when calling ext4_mb_init_cache in mballoc
Add error processing for ext4_mb_load_buddy when it calls ext4_mb_init_cache.
Signed-off-by Shen Feng <[email protected]>
--- fs/ext4/mballoc.c | 27 ++++++++++++++++++++------- 1 files changed, 20 insertions(+), 7 deletions(-)
fs/ext4/mballoc.c +20 -7
@@ -883,6 +883,7 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group,int pnum;int poff;struct page *page; +int ret;mb_debug ("load group %lu\n" , group);
@@ -914,15 +915,21 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group,if (page) {BUG_ON (page->mapping != inode->i_mapping);if (!PageUptodate (page)) { -ext4_mb_init_cache (page,NULL ); + ret =ext4_mb_init_cache (page,NULL ); +if (ret) { +unlock_page (page); + goto err; + }mb_cmp_bitmaps (e4b,page_address (page) + (poff * sb->s_blocksize)); }unlock_page (page); } } -if (page ==NULL || !PageUptodate (page)) +if (page ==NULL || !PageUptodate (page)) { + ret = -EIO ; goto err; + } e4b->bd_bitmap_page = page; e4b->bd_bitmap =page_address (page) + (poff * sb->s_blocksize);mark_page_accessed (page);
@@ -938,14 +945,20 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group, page =find_or_create_page (inode->i_mapping, pnum,GFP_NOFS );if (page) {BUG_ON (page->mapping != inode->i_mapping); -if (!PageUptodate (page)) -ext4_mb_init_cache (page, e4b->bd_bitmap); - +if (!PageUptodate (page)) { + ret =ext4_mb_init_cache (page, e4b->bd_bitmap); +if (ret) { +unlock_page (page); + goto err; + } + }unlock_page (page); } } -if (page ==NULL || !PageUptodate (page)) +if (page ==NULL || !PageUptodate (page)) { + ret = -EIO ; goto err; + } e4b->bd_buddy_page = page; e4b->bd_buddy =page_address (page) + (poff * sb->s_blocksize);mark_page_accessed (page);
@@ -962,7 +975,7 @@ err:page_cache_release (e4b->bd_buddy_page); e4b->bd_buddy =NULL ; e4b->bd_bitmap =NULL ; -return -EIO ; +return ret; }static void ext4_mb_release_desc (struct ext4_buddy *e4b)
Signature · 1 line
1.5.4.5
Quoted 4 lines · Shen Feng
Add error processing for
ext4_mb_load_buddywhen it callsext4_mb_init_cache.Signed-off-by Shen Feng <[email protected]>
Reviewed-by Aneesh Kumar K.V <[email protected]>
Quoted 80 lines
--- fs/ext4/mballoc.c | 27 ++++++++++++++++++++------- 1 files changed, 20 insertions(+), 7 deletions(-)fs/ext4/mballoc.c +20
-7@@ -883,6 +883,7 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group,int pnum;int poff;struct page *page; +int ret;mb_debug ("load group %lu\n" , group);@@ -914,15 +915,21 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group,if (page) {BUG_ON (page->mapping != inode->i_mapping);if (!PageUptodate (page)) { -ext4_mb_init_cache (page,NULL ); + ret =ext4_mb_init_cache (page,NULL ); +if (ret) { +unlock_page (page); + goto err; + }mb_cmp_bitmaps (e4b,page_address (page) + (poff * sb->s_blocksize)); }unlock_page (page); } } -if (page ==NULL || !PageUptodate (page)) +if (page ==NULL || !PageUptodate (page)) { + ret = -EIO ; goto err; + } e4b->bd_bitmap_page = page; e4b->bd_bitmap =page_address (page) + (poff * sb->s_blocksize);mark_page_accessed (page);@@ -938,14 +945,20 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group, page =find_or_create_page (inode->i_mapping, pnum,GFP_NOFS );if (page) {BUG_ON (page->mapping != inode->i_mapping); -if (!PageUptodate (page)) -ext4_mb_init_cache (page, e4b->bd_bitmap); - +if (!PageUptodate (page)) { + ret =ext4_mb_init_cache (page, e4b->bd_bitmap); +if (ret) { +unlock_page (page); + goto err; + } + }unlock_page (page); } } -if (page ==NULL || !PageUptodate (page)) +if (page ==NULL || !PageUptodate (page)) { + ret = -EIO ; goto err; + } e4b->bd_buddy_page = page; e4b->bd_buddy =page_address (page) + (poff * sb->s_blocksize);mark_page_accessed (page);@@ -962,7 +975,7 @@ err:page_cache_release (e4b->bd_buddy_page); e4b->bd_buddy =NULL ; e4b->bd_bitmap =NULL ; -return -EIO ; +return ret; }static void ext4_mb_release_desc (struct ext4_buddy *e4b)Signature · 5 lines
1.5.4.5 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 8 lines · Aneesh Kumar K.V
Quoted 4 lines · Shen Feng
Add error processing for
ext4_mb_load_buddywhen it callsext4_mb_init_cache.Signed-off-by Shen Feng <[email protected]>Reviewed-by Aneesh Kumar K.V <[email protected]>
Thanks, I have added these two fixes to ext4 patch queue.
Quoted 80 lines
Quoted 80 lines
--- fs/ext4/mballoc.c | 27 ++++++++++++++++++++------- 1 files changed, 20 insertions(+), 7 deletions(-)fs/ext4/mballoc.c +20
-7@@ -883,6 +883,7 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group,int pnum;int poff;struct page *page; +int ret;mb_debug ("load group %lu\n" , group);@@ -914,15 +915,21 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group,if (page) {BUG_ON (page->mapping != inode->i_mapping);if (!PageUptodate (page)) { -ext4_mb_init_cache (page,NULL ); + ret =ext4_mb_init_cache (page,NULL ); +if (ret) { +unlock_page (page); + goto err; + }mb_cmp_bitmaps (e4b,page_address (page) + (poff * sb->s_blocksize)); }unlock_page (page); } } -if (page ==NULL || !PageUptodate (page)) +if (page ==NULL || !PageUptodate (page)) { + ret = -EIO ; goto err; + } e4b->bd_bitmap_page = page; e4b->bd_bitmap =page_address (page) + (poff * sb->s_blocksize);mark_page_accessed (page);@@ -938,14 +945,20 @@ ext4_mb_load_buddy(struct super_block *sb, ext4_group_t group, page =find_or_create_page (inode->i_mapping, pnum,GFP_NOFS );if (page) {BUG_ON (page->mapping != inode->i_mapping); -if (!PageUptodate (page)) -ext4_mb_init_cache (page, e4b->bd_bitmap); - +if (!PageUptodate (page)) { + ret =ext4_mb_init_cache (page, e4b->bd_bitmap); +if (ret) { +unlock_page (page); + goto err; + } + }unlock_page (page); } } -if (page ==NULL || !PageUptodate (page)) +if (page ==NULL || !PageUptodate (page)) { + ret = -EIO ; goto err; + } e4b->bd_buddy_page = page; e4b->bd_buddy =page_address (page) + (poff * sb->s_blocksize);mark_page_accessed (page);@@ -962,7 +975,7 @@ err:page_cache_release (e4b->bd_buddy_page); e4b->bd_buddy =NULL ; e4b->bd_bitmap =NULL ; -return -EIO ; +return ret; }static void ext4_mb_release_desc (struct ext4_buddy *e4b)Signature · 5 lines
1.5.4.5 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html