Re: [f2fs-dev] [PATCH 01/14] f2fs: extend folio state for large folio write path
From: Daeho Jeong
Date: Wed Sep 09 2026 - 16:36:58 EST
On Mon, Sep 7, 2026 at 2:31 AM Nanzhe Zhao <nzzhao.sigma@xxxxxxxxx> wrote:
>
> On Thu, 27 Aug 2026 13:51:06 -0700, Daeho Jeong wrote:
> > + ffs->private_flags |= flags;
> >
> > Is this field protected by holding a lock properly?
>
> Thanks for the review.
> No, it doesn't. Thanks for pointing out.
>
> I want to change this using per-field atomic read-modify-write ops
> instead, to avoid taking state_lock, like below:
>
> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
> @@ f2fs_folio_get_private_flags() (f2fs.h:2719)
> if (f2fs_folio_has_ffs(folio)) {
> struct f2fs_folio_state *ffs = folio->private;
>
> - return ffs->private_flags;
> + return READ_ONCE(ffs->private_flags);
> }
> @@ f2fs_folio_set_private_flags() (f2fs.h:2730)
> if (f2fs_folio_has_ffs(folio)) {
> struct f2fs_folio_state *ffs = folio->private;
>
> - ffs->private_flags |= flags;
> + if (flags)
> + __atomic_or_fetch(&ffs->private_flags, flags,
> + __ATOMIC_RELAXED);
> return;
> }
> @@ f2fs_folio_clear_private_flags() (f2fs.h:2746)
> if (f2fs_folio_has_ffs(folio)) {
> struct f2fs_folio_state *ffs = folio->private;
>
> - ffs->private_flags &= ~flags;
> + if (flags)
> + __atomic_and_fetch(&ffs->private_flags, ~flags,
> + __ATOMIC_RELAXED);
> return;
> }
>
> Please let me know if this lock-free approach looks acceptable.
>
Please do not use compiler built-ins.
Plus, plz, consider race condition of the field with the non-ffs path.
Thanks,
> Thanks,
> Nanzhe