Re: [f2fs-dev] [PATCH v2] f2fs: introduce F2FS_IOC_START_ATOMIC_REPLACE

From: Daeho Jeong
Date: Mon Oct 03 2022 - 11:59:47 EST


> What I mean is:
>
> ---
> fs/f2fs/file.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index e4b6e51086a3..31b229678b1d 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -2053,6 +2053,9 @@ static int f2fs_ioc_start_atomic_write(struct file *filp, bool truncate)
>
> isize = i_size_read(inode);
> fi->original_i_size = isize;
> +
> + set_inode_flag(inode, FI_ATOMIC_FILE);
> +
> if (truncate) {
> set_inode_flag(inode, FI_ATOMIC_REPLACE);
> truncate_inode_pages_final(inode->i_mapping);
> @@ -2063,7 +2066,6 @@ static int f2fs_ioc_start_atomic_write(struct file *filp, bool truncate)
>
> stat_inc_atomic_inode(inode);
>
> - set_inode_flag(inode, FI_ATOMIC_FILE);
> set_inode_flag(fi->cow_inode, FI_COW_FILE);
> clear_inode_flag(fi->cow_inode, FI_INLINE_DATA);
> f2fs_up_write(&fi->i_gc_rwsem[WRITE]);
> --
>
>
> Let's set FI_ATOMIC_FILE flag before f2fs_i_size_write(inode, 0), so
> - f2fs_ioc_start_atomic_write
> - f2fs_i_size_write(, 0)
> - f2fs_mark_inode_dirty_sync
> check f2fs_is_atomic_file() and return correctly.
>

Ah, I got it.

> And for the case the inode is dirty before f2fs_i_size_write(, 0), we
> can call f2fs_write_inode() to flush dirty feilds into inode page, and
> make inode clean.
>

Thanks for the tips~

> >
> >>
> >> Thanks,