Re: [PATCH net-next] netlink: do not enter direct reclaim from netlink_trim()
From: Eric DumazetDate: Fri, 13 Jan 2017 09:11:22 -0800 > From: Eric Dumazet > > In commit d35c99ff77ecb ("netlink: do not enter direct reclaim from > netlink_dump()") we made sure to not trigger expensive memory reclaim. > > Problem is that a bit later, netlink_trim() might be called and > trigger memory reclaim. > > netlink_trim() should be best effort, and really as fast as possible. > Under memory pressure, it is fine to not trim this skb. > > Signed-off-by: Eric Dumazet Applied, thanks Eric.
Re: [PATCH net-next] netlink: do not enter direct reclaim from netlink_trim()
On Fri, Jan 13, 2017 at 09:11:22AM -0800, Eric Dumazet wrote: > From: Eric Dumazet> > In commit d35c99ff77ecb ("netlink: do not enter direct reclaim from > netlink_dump()") we made sure to not trigger expensive memory reclaim. > > Problem is that a bit later, netlink_trim() might be called and > trigger memory reclaim. > > netlink_trim() should be best effort, and really as fast as possible. > Under memory pressure, it is fine to not trim this skb. > > Signed-off-by: Eric Dumazet Thanks! Acked-by: Alexei Starovoitov
[PATCH net-next] netlink: do not enter direct reclaim from netlink_trim()
From: Eric DumazetIn commit d35c99ff77ecb ("netlink: do not enter direct reclaim from netlink_dump()") we made sure to not trigger expensive memory reclaim. Problem is that a bit later, netlink_trim() might be called and trigger memory reclaim. netlink_trim() should be best effort, and really as fast as possible. Under memory pressure, it is fine to not trim this skb. Signed-off-by: Eric Dumazet --- net/netlink/af_netlink.c |4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 161b628ab2b08bf4321dbe617022c4c50486534d..edcc1e19ad532641f51f6809b8c90d1e377081ff 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -1210,7 +1210,9 @@ static struct sk_buff *netlink_trim(struct sk_buff *skb, gfp_t allocation) skb = nskb; } - if (!pskb_expand_head(skb, 0, -delta, allocation)) + if (!pskb_expand_head(skb, 0, -delta, + (allocation & ~__GFP_DIRECT_RECLAIM) | + __GFP_NOWARN | __GFP_NORETRY)) skb->truesize -= delta; return skb;