On 9/18/25 11:32, Jiucheng Xu via B4 Relay wrote: > From: Jiucheng Xu <[email protected]> > > On 32-bit architectures, when GFP_NOFS is used, the file cache for write > operations cannot be allocated from the highmem and CMA.
Hi, Have you suffered any problem w/o this patch? Can you please describe more details about it? > > Since mapping->gfp_mask is set to GFP_HIGHUSER_MOVABLE during inode GFP_HIGHUSER_MOVABLE includes __GFP_FS, we should avoid using __GFP_FS here. f2fs_write_begin() uses GFP_NOFS like the most of other filesystem to avoid potential deadlock, as __filemap_get_folio(, .. |__GFP_FS | ..) may run into memory reclaim to call ->writeback in where we may suffer deadlock potentially. Thanks, > allocation, using mapping_gfp_mask(mapping) as the GFP flag of getting file > cache for writing is more efficient for 32-bit architectures. > > Signed-off-by: Jiucheng Xu <[email protected]> > --- > fs/f2fs/data.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c > index > 7961e0ddfca3aaa332b7dbd4985ae7766551834f..9fbc41f9accb2626da22754f1a424da4805ca823 > 100644 > --- a/fs/f2fs/data.c > +++ b/fs/f2fs/data.c > @@ -3587,7 +3587,8 @@ static int f2fs_write_begin(const struct kiocb *iocb, > * Will wait that below with our IO control. > */ > folio = __filemap_get_folio(mapping, index, > - FGP_LOCK | FGP_WRITE | FGP_CREAT, GFP_NOFS); > + FGP_LOCK | FGP_WRITE | FGP_CREAT, > + mapping_gfp_mask(mapping)); > if (IS_ERR(folio)) { > err = PTR_ERR(folio); > goto fail; > > --- > base-commit: c872b6279cd26762339ff02513e2a3f16149a6f1 > change-id: 20250910-origin-dev-8a5ff6bee1f2 > > Best regards, _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
