• Mingming Cao's avatar
    ext4: Fix BUG when writing to an unitialized extent · f5ab0d1f
    Mingming Cao authored
    
    
    This patch fixes a bug when writing to preallocated but uninitialized
    blocks, which resulted in a BUG in fs/buffer.c saying that the buffer
    is not mapped.
    
    When writing to a file, ext4_get_block_wrap() is called with create=1 in
    order to request that blocks be allocated if necessary.  It currently
    calls ext4_get_blocks() with create=0 in order to do a lookup first.  If
    the inode contains an unitialized data block, the buffer head is left
    unampped, which ext4_get_blocks_wrap() returns, causing the BUG.
    
    We fix this by checking to see if the buffer head is unmapped, and if
    so, we make sure the the buffer head is mapped by calling
    ext4_ext_get_blocks with create=1.
    
    Signed-off-by: default avatarMingming Cao <cmm@us.ibm.com>
    Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
    f5ab0d1f