diff options
Diffstat (limited to 'net/core/sock.c')
-rw-r--r-- | net/core/sock.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/net/core/sock.c b/net/core/sock.c index bc745d00ea4d..5a087626bb3a 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -207,7 +207,7 @@ static struct lock_class_key af_callback_keys[AF_MAX]; | |||
207 | * not depend upon such differences. | 207 | * not depend upon such differences. |
208 | */ | 208 | */ |
209 | #define _SK_MEM_PACKETS 256 | 209 | #define _SK_MEM_PACKETS 256 |
210 | #define _SK_MEM_OVERHEAD (sizeof(struct sk_buff) + 256) | 210 | #define _SK_MEM_OVERHEAD SKB_TRUESIZE(256) |
211 | #define SK_WMEM_MAX (_SK_MEM_OVERHEAD * _SK_MEM_PACKETS) | 211 | #define SK_WMEM_MAX (_SK_MEM_OVERHEAD * _SK_MEM_PACKETS) |
212 | #define SK_RMEM_MAX (_SK_MEM_OVERHEAD * _SK_MEM_PACKETS) | 212 | #define SK_RMEM_MAX (_SK_MEM_OVERHEAD * _SK_MEM_PACKETS) |
213 | 213 | ||
@@ -387,7 +387,7 @@ struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie) | |||
387 | 387 | ||
388 | if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) { | 388 | if (dst && dst->obsolete && dst->ops->check(dst, cookie) == NULL) { |
389 | sk_tx_queue_clear(sk); | 389 | sk_tx_queue_clear(sk); |
390 | rcu_assign_pointer(sk->sk_dst_cache, NULL); | 390 | RCU_INIT_POINTER(sk->sk_dst_cache, NULL); |
391 | dst_release(dst); | 391 | dst_release(dst); |
392 | return NULL; | 392 | return NULL; |
393 | } | 393 | } |
@@ -738,10 +738,7 @@ set_rcvbuf: | |||
738 | /* We implement the SO_SNDLOWAT etc to | 738 | /* We implement the SO_SNDLOWAT etc to |
739 | not be settable (1003.1g 5.3) */ | 739 | not be settable (1003.1g 5.3) */ |
740 | case SO_RXQ_OVFL: | 740 | case SO_RXQ_OVFL: |
741 | if (valbool) | 741 | sock_valbool_flag(sk, SOCK_RXQ_OVFL, valbool); |
742 | sock_set_flag(sk, SOCK_RXQ_OVFL); | ||
743 | else | ||
744 | sock_reset_flag(sk, SOCK_RXQ_OVFL); | ||
745 | break; | 742 | break; |
746 | default: | 743 | default: |
747 | ret = -ENOPROTOOPT; | 744 | ret = -ENOPROTOOPT; |
@@ -1158,7 +1155,7 @@ static void __sk_free(struct sock *sk) | |||
1158 | atomic_read(&sk->sk_wmem_alloc) == 0); | 1155 | atomic_read(&sk->sk_wmem_alloc) == 0); |
1159 | if (filter) { | 1156 | if (filter) { |
1160 | sk_filter_uncharge(sk, filter); | 1157 | sk_filter_uncharge(sk, filter); |
1161 | rcu_assign_pointer(sk->sk_filter, NULL); | 1158 | RCU_INIT_POINTER(sk->sk_filter, NULL); |
1162 | } | 1159 | } |
1163 | 1160 | ||
1164 | sock_disable_timestamp(sk, SOCK_TIMESTAMP); | 1161 | sock_disable_timestamp(sk, SOCK_TIMESTAMP); |
@@ -1533,7 +1530,6 @@ struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len, | |||
1533 | skb_shinfo(skb)->nr_frags = npages; | 1530 | skb_shinfo(skb)->nr_frags = npages; |
1534 | for (i = 0; i < npages; i++) { | 1531 | for (i = 0; i < npages; i++) { |
1535 | struct page *page; | 1532 | struct page *page; |
1536 | skb_frag_t *frag; | ||
1537 | 1533 | ||
1538 | page = alloc_pages(sk->sk_allocation, 0); | 1534 | page = alloc_pages(sk->sk_allocation, 0); |
1539 | if (!page) { | 1535 | if (!page) { |
@@ -1543,12 +1539,11 @@ struct sk_buff *sock_alloc_send_pskb(struct sock *sk, unsigned long header_len, | |||
1543 | goto failure; | 1539 | goto failure; |
1544 | } | 1540 | } |
1545 | 1541 | ||
1546 | frag = &skb_shinfo(skb)->frags[i]; | 1542 | __skb_fill_page_desc(skb, i, |
1547 | frag->page = page; | 1543 | page, 0, |
1548 | frag->page_offset = 0; | 1544 | (data_len >= PAGE_SIZE ? |
1549 | frag->size = (data_len >= PAGE_SIZE ? | 1545 | PAGE_SIZE : |
1550 | PAGE_SIZE : | 1546 | data_len)); |
1551 | data_len); | ||
1552 | data_len -= PAGE_SIZE; | 1547 | data_len -= PAGE_SIZE; |
1553 | } | 1548 | } |
1554 | 1549 | ||