Details
[Home]
Issue of the Implementation # F0005
Brief
ext4: system hangs after failure in ext4_mb_new_preallocation()
Detailed Description
If memory allocation in ext4_mb_new_group_pa() is failed, it returns error code, ext4_mb_new_preallocation() propages it,but ext4_mb_new_blocks() ignores it. An observed result was:
- allocation fail means ext4_mb_new_group_pa() does not update ext4_allocation_context;
- ext4_mb_new_blocks() sets ext4_allocation_request->len (ar->len = ac->ac_b_ex.fe_len;)
to number of blocks preallocated (512) instead of number of blocks requested (1);
- that activates update cycle in ext4_splice_branch():
for (i = 1; i < blks; i++) <-- blks is 512 instead of 1 here
*(where->p + i) = cpu_to_le32(current_block++);
- it iterates 511 times and corrupts a chunk of memory including inode structure;
- page fault happens at EXT4_SB(inode->i_sb) in ext4_mark_inode_dirty();
- system hangs with "scheduling while atomic" BUG.
Component
linux-kernel 3.9
Accepted
https://lkml.org/lkml/2013/5/5/64
commit
Status
Fixed in kernel 3.10-rc3
[Home]
»