The current code that handles uninlining data is racy. The uninlining and the update of i_inline_version are not well coordinated, so one task could end up uninlining the data and then performing a write to the OSD and then a second task could end up uninlining the data again and clobber the first task's write. The first couple of patches do a little cleanup of the uninlining helper code, and then the last patch fixes the potential race. Jeff Layton (3): ceph: make ceph_uninline_data take inode pointer ceph: pass unlocked page to ceph_uninline_data ceph: fix potential races in ceph_uninline_data fs/ceph/addr.c | 57 +++++++++++++++++++++++++++---------------------- fs/ceph/file.c | 18 ++++++---------- fs/ceph/super.h | 2 +- 3 files changed, 39 insertions(+), 38 deletions(-) -- 2.21.0