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