Commit 19b8b035 authored by Theodore Ts'o's avatar Theodore Ts'o

ext4: convert some BUG_ON's in mballoc to use WARN_RATELIMITED instead

In cases where we have an obvious way of continuing, let's use
WARN_RATELIMITED() instead of BUG_ON().
Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 91a48aaf
...@@ -1487,7 +1487,13 @@ ext4_mb_load_buddy_gfp(struct super_block *sb, ext4_group_t group, ...@@ -1487,7 +1487,13 @@ ext4_mb_load_buddy_gfp(struct super_block *sb, ext4_group_t group,
put_page(page); put_page(page);
page = find_or_create_page(inode->i_mapping, pnum, gfp); page = find_or_create_page(inode->i_mapping, pnum, gfp);
if (page) { if (page) {
BUG_ON(page->mapping != inode->i_mapping); if (WARN_RATELIMIT(page->mapping != inode->i_mapping,
"ext4: bitmap's paging->mapping != inode->i_mapping\n")) {
/* should never happen */
unlock_page(page);
ret = -EINVAL;
goto err;
}
if (!PageUptodate(page)) { if (!PageUptodate(page)) {
ret = ext4_mb_init_cache(page, NULL, gfp); ret = ext4_mb_init_cache(page, NULL, gfp);
if (ret) { if (ret) {
...@@ -1523,7 +1529,13 @@ ext4_mb_load_buddy_gfp(struct super_block *sb, ext4_group_t group, ...@@ -1523,7 +1529,13 @@ ext4_mb_load_buddy_gfp(struct super_block *sb, ext4_group_t group,
put_page(page); put_page(page);
page = find_or_create_page(inode->i_mapping, pnum, gfp); page = find_or_create_page(inode->i_mapping, pnum, gfp);
if (page) { if (page) {
BUG_ON(page->mapping != inode->i_mapping); if (WARN_RATELIMIT(page->mapping != inode->i_mapping,
"ext4: buddy bitmap's page->mapping != inode->i_mapping\n")) {
/* should never happen */
unlock_page(page);
ret = -EINVAL;
goto err;
}
if (!PageUptodate(page)) { if (!PageUptodate(page)) {
ret = ext4_mb_init_cache(page, e4b->bd_bitmap, ret = ext4_mb_init_cache(page, e4b->bd_bitmap,
gfp); gfp);
...@@ -2221,7 +2233,9 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac, ...@@ -2221,7 +2233,9 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac,
continue; continue;
buddy = mb_find_buddy(e4b, i, &max); buddy = mb_find_buddy(e4b, i, &max);
BUG_ON(buddy == NULL); if (WARN_RATELIMIT(buddy == NULL,
"ext4: mb_simple_scan_group: mb_find_buddy failed, (%d)\n", i))
continue;
k = mb_find_next_zero_bit(buddy, max, 0); k = mb_find_next_zero_bit(buddy, max, 0);
if (k >= max) { if (k >= max) {
...@@ -4229,15 +4243,14 @@ static void ext4_discard_allocated_blocks(struct ext4_allocation_context *ac) ...@@ -4229,15 +4243,14 @@ static void ext4_discard_allocated_blocks(struct ext4_allocation_context *ac)
if (ac->ac_f_ex.fe_len == 0) if (ac->ac_f_ex.fe_len == 0)
return; return;
err = ext4_mb_load_buddy(ac->ac_sb, ac->ac_f_ex.fe_group, &e4b); err = ext4_mb_load_buddy(ac->ac_sb, ac->ac_f_ex.fe_group, &e4b);
if (err) { if (WARN_RATELIMIT(err,
"ext4: mb_load_buddy failed (%d)", err))
/* /*
* This should never happen since we pin the * This should never happen since we pin the
* pages in the ext4_allocation_context so * pages in the ext4_allocation_context so
* ext4_mb_load_buddy() should never fail. * ext4_mb_load_buddy() should never fail.
*/ */
WARN(1, "mb_load_buddy failed (%d)", err);
return; return;
}
ext4_lock_group(ac->ac_sb, ac->ac_f_ex.fe_group); ext4_lock_group(ac->ac_sb, ac->ac_f_ex.fe_group);
mb_free_blocks(ac->ac_inode, &e4b, ac->ac_f_ex.fe_start, mb_free_blocks(ac->ac_inode, &e4b, ac->ac_f_ex.fe_start,
ac->ac_f_ex.fe_len); ac->ac_f_ex.fe_len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment