exofs: simple_write_end does not mark_inode_dirty
authorBoaz Harrosh <bharrosh@panasas.com>
Sun, 27 Dec 2009 15:01:42 +0000 (17:01 +0200)
committerBoaz Harrosh <bharrosh@panasas.com>
Tue, 5 Jan 2010 07:14:32 +0000 (09:14 +0200)
commitefd124b999fb4d426b30675f1684521af0872789
treef9421d61b3c4faf682fc1a52b72b241fa9b37558
parent89be503021f550575fc896671b569941140b2c2e
exofs: simple_write_end does not mark_inode_dirty

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: Boaz Harrosh <bharrosh@panasas.com>
fs/exofs/inode.c