• Boaz Harrosh's avatar
    exofs: simple_write_end does not mark_inode_dirty · efd124b9
    Boaz Harrosh authored
    exofs uses simple_write_end() for it's .write_end handler. But
    it is not enough because simple_write_end() does not call
    mark_inode_dirty() when it extends i_size. So even if we do
    call mark_inode_dirty at beginning of write out, with a very
    long IO and a saturated system we might get the .write_inode()
    called while still extend-writing to file and miss out on the last
    i_size updates.
    
    So override .write_end, call simple_write_end(), and afterwords if
    i_size was changed call mark_inode_dirty().
    
    It stands to logic that since simple_write_end() was the one extending
    i_size it should also call mark_inode_dirty(). But it looks like all
    users of simple_write_end() are memory-bound pseudo filesystems, who
    could careless about mark_inode_dirty(). I might submit a
    warning-comment patch to simple_write_end() in future.
    
    CC: Stable <stable@kernel.org>
    Signed-off-by: default avatarBoaz Harrosh <bharrosh@panasas.com>
    efd124b9
inode.c 31.4 KB