Re: [PATCH for-akpm for-6.14-rcX] NFS: fix nfs_release_folio() to not call nfs_wb_folio() from kcompactd

Mike Snitzer
2025-02-26T15:44:20Z

On Wed, Feb 26, 2025 at 06:58:11AM -0800, Christoph Hellwig wrote:
> On Mon, Feb 24, 2025 at 07:33:01PM -0500, Mike Snitzer wrote:
> > Add PF_KCOMPACTD flag and current_is_kcompactd() helper to check for
> > it so nfs_release_folio() can skip calling nfs_wb_folio() from
> > kcompactd.
> >
> > Otherwise NFS can deadlock waiting for kcompactd enduced writeback
> > which recurses back to NFS (which triggers writeback to NFSD via
> > NFS loopback mount on the same host, NFSD blocks waiting for XFS's
> > call to __filemap_get_folio):
>
> Having a flag for a specific kernel thread feels wrong. I'm not an
> expert in this area, but as fast as I can tell the problem is that
> kcompactd should be calling into ->release_folio without __GFP_IO
> set.

We can easily remove PF_KCOMPACTD and current_is_kcompactd() if/when
more analysis and a cleaner fix emerges (from you, mm experts, etc).
I'm not saying you're wrong about GFP flags needing to be clamped by
kcompactd's call to ->release_folio, but it seems more finishing work
needed.

As you can tell from my patch, we already have kswapd specialization
with PF_KSWAPD and current_is_kswapd(). A consumer of large folios
knowing that it being called as kcompactd is useful, hence my fix for
deadlock seen with NFS loopback mounts on memory constrained systems.

Mike