Reviewed-by: Daeho Jeong <daehojeong@xxxxxxxxxx> On Wed, Mar 13, 2024 at 4:37 AM Sunmin Jeong <s_min.jeong@xxxxxxxxxxx> wrote: > > In f2fs_update_inode, i_size of the atomic file isn't updated until > FI_ATOMIC_COMMITTED flag is set. When committing atomic write right > after the writeback of the inode, i_size of the raw inode will not be > updated. It can cause the atomicity corruption due to a mismatch between > old file size and new data. > > To prevent the problem, let's mark inode dirty for FI_ATOMIC_COMMITTED > > Atomic write thread Writeback thread > __writeback_single_inode > write_inode > f2fs_update_inode > - skip i_size update > f2fs_ioc_commit_atomic_write > f2fs_commit_atomic_write > set_inode_flag(inode, FI_ATOMIC_COMMITTED) > f2fs_do_sync_file > f2fs_fsync_node_pages > - skip f2fs_update_inode since the inode is clean > > Fixes: 3db1de0e582c ("f2fs: change the current atomic write way") > Cc: stable@xxxxxxxxxxxxxxx #v5.19+ > Reviewed-by: Sungjong Seo <sj1557.seo@xxxxxxxxxxx> > Reviewed-by: Yeongjin Gil <youngjin.gil@xxxxxxxxxxx> > Signed-off-by: Sunmin Jeong <s_min.jeong@xxxxxxxxxxx> > --- > fs/f2fs/f2fs.h | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > index 543898482f8b..a000cb024dbe 100644 > --- a/fs/f2fs/f2fs.h > +++ b/fs/f2fs/f2fs.h > @@ -3039,6 +3039,7 @@ static inline void __mark_inode_dirty_flag(struct inode *inode, > case FI_INLINE_DOTS: > case FI_PIN_FILE: > case FI_COMPRESS_RELEASED: > + case FI_ATOMIC_COMMITTED: > f2fs_mark_inode_dirty_sync(inode, true); > } > } > -- > 2.25.1 > > > > _______________________________________________ > Linux-f2fs-devel mailing list > Linux-f2fs-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel