On 8/25/25 14:40, Matthew Wilcox wrote:
On Mon, Aug 25, 2025 at 08:17:37PM +0800, yangshiguang1011@163.com wrote:
Avoid deadlock caused by implicitly waking up kswapd by passing in allocation flags.
[...]
- /* Preemption is disabled in ___slab_alloc() */
- gfp_flags &= ~(__GFP_DIRECT_RECLAIM);
If you don't mean __GFP_KSWAPD_RECLAIM here, the explanation needs to be better.
It was suggested by Harry here: https://lore.kernel.org/all/aKKhUoUkRNDkFYYb@harry/
I think the comment is enough? Disabling preemption means we can't direct reclaim, but we can wake up kswapd. If the slab caller context is such that we can't, __GFP_KSWAPD_RECLAIM already won't be in the gfp_flags.
But I think we should mask our also __GFP_NOFAIL and add __GFP_NOWARN?
(we should get some common helpers for these kinds of gfp flag manipulations already)