linux-stable/fs/f2fs
Sunmin Jeong 6966586c2f f2fs: truncate page cache before clearing flags when aborting atomic write
[ Upstream commit 74b0ebcbdd ]

In f2fs_do_write_data_page, FI_ATOMIC_FILE flag selects the target inode
between the original inode and COW inode. When aborting atomic write and
writeback occur simultaneously, invalid data can be written to original
inode if the FI_ATOMIC_FILE flag is cleared meanwhile.

To prevent the problem, let's truncate all pages before clearing the flag

Atomic write thread              Writeback thread
  f2fs_abort_atomic_write
    clear_inode_flag(inode, FI_ATOMIC_FILE)
                                  __writeback_single_inode
                                    do_writepages
                                      f2fs_do_write_data_page
                                        - use dn of original inode
    truncate_inode_pages_final

Fixes: 3db1de0e58 ("f2fs: change the current atomic write way")
Cc: stable@vger.kernel.org #v5.19+
Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
Reviewed-by: Yeongjin Gil <youngjin.gil@samsung.com>
Signed-off-by: Sunmin Jeong <s_min.jeong@samsung.com>
Reviewed-by: Daeho Jeong <daehojeong@google.com>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-04-03 15:28:33 +02:00
..
Kconfig fs: add CONFIG_BUFFER_HEAD 2023-08-02 09:13:09 -06:00
Makefile f2fs: separate out iostat feature 2021-08-23 10:25:51 -07:00
acl.c fs: port i_{g,u}id_into_vfs{g,u}id() to mnt_idmap 2023-01-19 09:24:29 +01:00
acl.h fs: port ->set_acl() to pass mnt_idmap 2023-01-19 09:24:27 +01:00
checkpoint.c f2fs: fix to truncate meta inode pages forcely 2024-03-26 18:20:03 -04:00
compress.c f2fs: ro: compress: fix to avoid caching unaligned extent 2024-03-26 18:20:02 -04:00
data.c f2fs: introduce f2fs_invalidate_internal_cache() for cleanup 2024-03-26 18:20:03 -04:00
debug.c f2fs: fix to account cp stats correctly 2023-08-14 13:42:05 -07:00
dir.c f2fs: fix to create selinux label during whiteout initialization 2024-03-26 18:20:01 -04:00
extent_cache.c f2fs: split initial and dynamic conditions for extent_cache 2023-11-28 17:20:11 +00:00
f2fs.h f2fs: mark inode dirty for FI_ATOMIC_COMMITTED flag 2024-04-03 15:28:33 +02:00
file.c f2fs: compress: fix reserve_cblocks counting error when out of space 2024-03-26 18:20:03 -04:00
gc.c f2fs: introduce f2fs_invalidate_internal_cache() for cleanup 2024-03-26 18:20:03 -04:00
gc.h f2fs: Fix system crash due to lack of free space in LFS 2023-04-10 10:58:45 -07:00
hash.c f2fs: don't use casefolded comparison for "." and ".." 2022-05-17 11:19:23 -07:00
inline.c f2fs update for 6.6-rc1 2023-09-02 15:37:59 -07:00
inode.c f2fs: introduce get_dnode_addr() to clean up codes 2024-03-26 18:19:59 -04:00
iostat.c f2fs: add async reset zone command support 2023-06-12 13:04:09 -07:00
iostat.h f2fs: use iostat_lat_type directly as a parameter in the iostat_update_and_unbind_ctx() 2023-02-07 10:39:28 -08:00
namei.c f2fs: fix to create selinux label during whiteout initialization 2024-03-26 18:20:01 -04:00
node.c f2fs: ro: compress: fix to avoid caching unaligned extent 2024-03-26 18:20:02 -04:00
node.h f2fs: fix compile warning in f2fs_destroy_node_manager() 2023-06-30 16:38:27 -07:00
recovery.c f2fs: fix to avoid potential panic during recovery 2024-03-26 18:20:00 -04:00
segment.c f2fs: truncate page cache before clearing flags when aborting atomic write 2024-04-03 15:28:33 +02:00
segment.h f2fs: check number of blocks in a current section 2024-03-26 18:20:02 -04:00
shrinker.c f2fs: add block_age-based extent cache 2022-12-12 14:53:56 -08:00
super.c f2fs: zone: fix to remove pow2 check condition for zoned block device 2024-03-26 18:20:03 -04:00
sysfs.c f2fs: fix to account cp stats correctly 2023-08-14 13:42:05 -07:00
verity.c f2fs-for-6.3-rc1 2023-02-27 16:18:51 -08:00
xattr.c f2fs: fix to check return value of f2fs_recover_xattr_data 2024-01-25 15:35:37 -08:00
xattr.h f2fs: cleanup MIN_INLINE_XATTR_SIZE 2023-06-26 06:07:10 -07:00