diff options
Diffstat (limited to 'net/core/sock.c')
-rw-r--r-- | net/core/sock.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index 0c127dcdf6a8..c0fc6bdad1e3 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -1775,7 +1775,9 @@ struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len, | |||
1775 | while (order) { | 1775 | while (order) { |
1776 | if (npages >= 1 << order) { | 1776 | if (npages >= 1 << order) { |
1777 | page = alloc_pages(sk->sk_allocation | | 1777 | page = alloc_pages(sk->sk_allocation | |
1778 | __GFP_COMP | __GFP_NOWARN, | 1778 | __GFP_COMP | |
1779 | __GFP_NOWARN | | ||
1780 | __GFP_NORETRY, | ||
1779 | order); | 1781 | order); |
1780 | if (page) | 1782 | if (page) |
1781 | goto fill_page; | 1783 | goto fill_page; |
@@ -1845,7 +1847,7 @@ bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t prio) | |||
1845 | gfp_t gfp = prio; | 1847 | gfp_t gfp = prio; |
1846 | 1848 | ||
1847 | if (order) | 1849 | if (order) |
1848 | gfp |= __GFP_COMP | __GFP_NOWARN; | 1850 | gfp |= __GFP_COMP | __GFP_NOWARN | __GFP_NORETRY; |
1849 | pfrag->page = alloc_pages(gfp, order); | 1851 | pfrag->page = alloc_pages(gfp, order); |
1850 | if (likely(pfrag->page)) { | 1852 | if (likely(pfrag->page)) { |
1851 | pfrag->offset = 0; | 1853 | pfrag->offset = 0; |
@@ -2355,10 +2357,13 @@ void release_sock(struct sock *sk) | |||
2355 | if (sk->sk_backlog.tail) | 2357 | if (sk->sk_backlog.tail) |
2356 | __release_sock(sk); | 2358 | __release_sock(sk); |
2357 | 2359 | ||
2360 | /* Warning : release_cb() might need to release sk ownership, | ||
2361 | * ie call sock_release_ownership(sk) before us. | ||
2362 | */ | ||
2358 | if (sk->sk_prot->release_cb) | 2363 | if (sk->sk_prot->release_cb) |
2359 | sk->sk_prot->release_cb(sk); | 2364 | sk->sk_prot->release_cb(sk); |
2360 | 2365 | ||
2361 | sk->sk_lock.owned = 0; | 2366 | sock_release_ownership(sk); |
2362 | if (waitqueue_active(&sk->sk_lock.wq)) | 2367 | if (waitqueue_active(&sk->sk_lock.wq)) |
2363 | wake_up(&sk->sk_lock.wq); | 2368 | wake_up(&sk->sk_lock.wq); |
2364 | spin_unlock_bh(&sk->sk_lock.slock); | 2369 | spin_unlock_bh(&sk->sk_lock.slock); |