summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2017-01-13 09:11:22 -0800
committerDavid S. Miller <davem@davemloft.net>2017-01-16 13:39:35 -0500
commite89df813174d81abee8be8cabc047d69ef78c26d (patch)
tree1ca7dfe3ec605b658246e3efb24c9c8e2416e2f4
parent3be0679b4a91930ca8d0c8a66b39058a698e70fe (diff)
downloadlinux-e89df813174d81abee8be8cabc047d69ef78c26d.tar.gz
linux-e89df813174d81abee8be8cabc047d69ef78c26d.tar.bz2
linux-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>
-rw-r--r--net/netlink/af_netlink.c4
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;