When compressed file has blocks, start atomic write will be failed, but still set FI_ATOMIC_FILE flag, if write partial cluster and commit atomic write will cause data corruption. Fixes: 4c8ff7095bef (f2fs: support data compression) Fixes: 7eab7a696827 (f2fs: compress: remove unneeded read when rewrite whole cluster)
Signed-off-by: Fengnan Chang <[email protected]> --- fs/f2fs/data.c | 4 +--- fs/f2fs/file.c | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 6b5f389ba998..5cbee4ed0982 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -3358,8 +3358,7 @@ static int f2fs_write_begin(struct file *file, struct address_space *mapping, int ret; *fsdata = NULL; - - if (len == PAGE_SIZE) + if (len == PAGE_SIZE && !(f2fs_is_atomic_file(inode))) goto repeat; ret = f2fs_prepare_compress_overwrite(inode, pagep, diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index cfdc41f87f5d..26a648ef9e1f 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -2009,7 +2009,8 @@ static int f2fs_ioc_start_atomic_write(struct file *filp) inode_lock(inode); - f2fs_disable_compressed_file(inode); + if (!f2fs_disable_compressed_file(inode)) + return -EINVAL; if (f2fs_is_atomic_file(inode)) { if (is_inode_flag_set(inode, FI_ATOMIC_REVOKE_REQUEST)) -- 2.25.1 git send-email --to [email protected] --to [email protected] --cc [email protected] --cc [email protected] --rfc 0001-f2fs-fix-compress-file-start-atomic-write-may-cause-.patch _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
