• Ross Zwisler's avatar
    ext2, ext4: fix issue with missing journal entry in ext4_dax_mkwrite() · 1e9d180b
    Ross Zwisler authored
    As it is currently written ext4_dax_mkwrite() assumes that the call into
    __dax_mkwrite() will not have to do a block allocation so it doesn't create
    a journal entry.  For a read that creates a zero page to cover a hole
    followed by a write that actually allocates storage this is incorrect.  The
    ext4_dax_mkwrite() -> __dax_mkwrite() -> __dax_fault() path calls
    get_blocks() to allocate storage.
    
    Fix this by having the ->page_mkwrite fault handler call ext4_dax_fault()
    as this function already has all the logic needed to allocate a journal
    entry and call __dax_fault().
    
    Also update the ext2 fault handlers in this same way to remove duplicate
    code and keep the logic between ext2 and ext4 the same.
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Signed-off-by: default avatarRoss Zwisler <ross.zwisler@linux.intel.com>
    Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
    1e9d180b
file.c 4.87 KB