ceph: Fix i_size update race
authorSage Weil <sage@inktank.com>
Mon, 5 Nov 2012 19:07:23 +0000 (11:07 -0800)
committerSage Weil <sage@inktank.com>
Mon, 5 Nov 2012 19:07:23 +0000 (11:07 -0800)
commit22cddde104d715600a4c218bf9224923208afe90
tree82fc93d9c89ef41145e52ace63484047e600f866
parent4d1d0534f53863108fdea496288cb3310f88118d
ceph: Fix i_size update race

ceph_aio_write() has an optimization that marks cap EPH_CAP_FILE_WR
dirty before data is copied to page cache and inode size is updated.
If ceph_check_caps() flushes the dirty cap before the inode size is
updated, MDS can miss the new inode size. The fix is move
ceph_{get,put}_cap_refs() into ceph_write_{begin,end}() and call
__ceph_mark_dirty_caps() after inode size is updated.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Signed-off-by: Sage Weil <sage@inktank.com>
fs/ceph/addr.c
fs/ceph/file.c