From: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> BTRFS direct write takes the inode lock for performing the direct write. In case of a failure or an incomplete write, it falls back to buffered writes. Before initiating the buffered write, it releases the inode lock and reacquires it for buffered write. This may lead to corruption if another process attempts to write around the same offset between the unlock and the relock. The patches change the flow so that the lock is taken only once before the write and released only after the I/O is complete. Goldwyn Rodrigues (2): iomap: Separate out generic_write_sync() from iomap_dio_complete() btrfs: Make btrfs_direct_write atomic with respect to inode_lock fs/btrfs/file.c | 69 +++++++++++++++++++++++++------------------ fs/iomap/direct-io.c | 16 ++++++++-- include/linux/iomap.h | 2 +- 3 files changed, 54 insertions(+), 33 deletions(-) -- 2.29.2