Hi Mel Gorman, I may have found a problem in pfmemalloc skb handling in net/core/dev.c. I see there are "if" conditions checking for "sk_memalloc_socks() && skb_pfmemalloc(skb)", and when the condition is true, the skb is handled specially as a pfmemalloc skb, otherwise it is handled as a normal skb.
However, if "sk_memalloc_socks()" is false and "skb_pfmemalloc(skb)" is true, the skb is still handled as a normal skb. Is this correct? This might happen if "sk_memalloc_socks()" was originally true and has just turned into false before the check. Can this happen? I found the original commit that added the "if" conditions: commit b4b9e3558508 ("netvm: set PF_MEMALLOC as appropriate during SKB processing") The commit message clearly indicates pfmemalloc skbs shouldn't be delivered to taps (or protocols that don't support pfmemalloc skbs). However, if they are incorrectly handled as normal skbs, they could be delivered to those places. I'm not sure if my understanding is correct. Could you please help? Thank you!