On Fri, Apr 9, 2021 at 4:50 AM Eric Dumazet <eric.duma...@gmail.com> wrote: > > On 4/9/21 12:14 PM, Xie He wrote: > > Then simply copy the needed logic.
No, there's no such thing as "sockets" in some of the protocols. There is simply no way to copy "the needed logic". > > Also, I think this is a problem in net/core/dev.c, there are a lot of > > old protocols that are not aware of pfmemalloc skbs. I don't think > > it's a good idea to fix them one by one. > > > > I think you are mistaken. > > There is no problem in net/core/dev.c really, it uses > skb_pfmemalloc_protocol() This is exactly what I'm talking about. "skb_pfmemalloc_protocol" cannot guarantee pfmemalloc skbs are not delivered to unrelated protocols, because "__netif_receive_skb" will sometimes treat pfmemalloc skbs as normal skbs. > pfmemalloc is best effort really. > > If a layer store packets in many long living queues, it has to drop > pfmemalloc packets, > unless these packets are used for swapping. Yes, the code of "net/core/dev.c" has exactly this problem. It doesn't drop pfmemalloc skbs in some situations, and instead deliver them to unrelated protocols, which clearly have nothing to do with swapping. I'm not sure if you understand what I'm saying. Please look at the code of "__netif_receive_skb" and see what will happen when "sk_memalloc_socks()" is false and "skb_pfmemalloc(skb)" is true.