diff options
author | Eric Dumazet <edumazet@google.com> | 2017-01-13 09:11:22 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-01-16 13:39:35 -0500 |
commit | e89df813174d81abee8be8cabc047d69ef78c26d (patch) | |
tree | 1ca7dfe3ec605b658246e3efb24c9c8e2416e2f4 /net/netlink | |
parent | 3be0679b4a91930ca8d0c8a66b39058a698e70fe (diff) | |
download | linux-stable-e89df813174d81abee8be8cabc047d69ef78c26d.tar.gz linux-stable-e89df813174d81abee8be8cabc047d69ef78c26d.tar.bz2 linux-stable-e89df813174d81abee8be8cabc047d69ef78c26d.zip |
netlink: do not enter direct reclaim from netlink_trim()
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 <edumazet@google.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/netlink')
-rw-r--r-- | net/netlink/af_netlink.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index 161b628ab2b0..edcc1e19ad53 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; |