diff options
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/pktgen.c | 8 | ||||
-rw-r--r-- | net/core/skbuff.c | 16 | ||||
-rw-r--r-- | net/core/sock.c | 4 |
3 files changed, 16 insertions, 12 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index d068ec25db1e..0304f981f7ff 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -3338,7 +3338,9 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev) | |||
3338 | queue_map = skb_get_queue_mapping(pkt_dev->skb); | 3338 | queue_map = skb_get_queue_mapping(pkt_dev->skb); |
3339 | txq = netdev_get_tx_queue(odev, queue_map); | 3339 | txq = netdev_get_tx_queue(odev, queue_map); |
3340 | 3340 | ||
3341 | __netif_tx_lock_bh(txq); | 3341 | local_bh_disable(); |
3342 | |||
3343 | HARD_TX_LOCK(odev, txq, smp_processor_id()); | ||
3342 | 3344 | ||
3343 | if (unlikely(netif_xmit_frozen_or_drv_stopped(txq))) { | 3345 | if (unlikely(netif_xmit_frozen_or_drv_stopped(txq))) { |
3344 | ret = NETDEV_TX_BUSY; | 3346 | ret = NETDEV_TX_BUSY; |
@@ -3374,7 +3376,9 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev) | |||
3374 | pkt_dev->last_ok = 0; | 3376 | pkt_dev->last_ok = 0; |
3375 | } | 3377 | } |
3376 | unlock: | 3378 | unlock: |
3377 | __netif_tx_unlock_bh(txq); | 3379 | HARD_TX_UNLOCK(odev, txq); |
3380 | |||
3381 | local_bh_enable(); | ||
3378 | 3382 | ||
3379 | /* If pkt_dev->count is zero, then run forever */ | 3383 | /* If pkt_dev->count is zero, then run forever */ |
3380 | if ((pkt_dev->count != 0) && (pkt_dev->sofar >= pkt_dev->count)) { | 3384 | if ((pkt_dev->count != 0) && (pkt_dev->sofar >= pkt_dev->count)) { |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 30c7d35dd862..1b62343f5837 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -3458,8 +3458,6 @@ static void sock_rmem_free(struct sk_buff *skb) | |||
3458 | */ | 3458 | */ |
3459 | int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) | 3459 | int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) |
3460 | { | 3460 | { |
3461 | int len = skb->len; | ||
3462 | |||
3463 | if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= | 3461 | if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= |
3464 | (unsigned int)sk->sk_rcvbuf) | 3462 | (unsigned int)sk->sk_rcvbuf) |
3465 | return -ENOMEM; | 3463 | return -ENOMEM; |
@@ -3474,7 +3472,7 @@ int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) | |||
3474 | 3472 | ||
3475 | skb_queue_tail(&sk->sk_error_queue, skb); | 3473 | skb_queue_tail(&sk->sk_error_queue, skb); |
3476 | if (!sock_flag(sk, SOCK_DEAD)) | 3474 | if (!sock_flag(sk, SOCK_DEAD)) |
3477 | sk->sk_data_ready(sk, len); | 3475 | sk->sk_data_ready(sk); |
3478 | return 0; | 3476 | return 0; |
3479 | } | 3477 | } |
3480 | EXPORT_SYMBOL(sock_queue_err_skb); | 3478 | EXPORT_SYMBOL(sock_queue_err_skb); |
@@ -3937,12 +3935,14 @@ EXPORT_SYMBOL_GPL(skb_scrub_packet); | |||
3937 | unsigned int skb_gso_transport_seglen(const struct sk_buff *skb) | 3935 | unsigned int skb_gso_transport_seglen(const struct sk_buff *skb) |
3938 | { | 3936 | { |
3939 | const struct skb_shared_info *shinfo = skb_shinfo(skb); | 3937 | const struct skb_shared_info *shinfo = skb_shinfo(skb); |
3940 | unsigned int hdr_len; | ||
3941 | 3938 | ||
3942 | if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) | 3939 | if (likely(shinfo->gso_type & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))) |
3943 | hdr_len = tcp_hdrlen(skb); | 3940 | return tcp_hdrlen(skb) + shinfo->gso_size; |
3944 | else | 3941 | |
3945 | hdr_len = sizeof(struct udphdr); | 3942 | /* UFO sets gso_size to the size of the fragmentation |
3946 | return hdr_len + shinfo->gso_size; | 3943 | * payload, i.e. the size of the L4 (UDP) header is already |
3944 | * accounted for. | ||
3945 | */ | ||
3946 | return shinfo->gso_size; | ||
3947 | } | 3947 | } |
3948 | EXPORT_SYMBOL_GPL(skb_gso_transport_seglen); | 3948 | EXPORT_SYMBOL_GPL(skb_gso_transport_seglen); |
diff --git a/net/core/sock.c b/net/core/sock.c index c0fc6bdad1e3..b4fff008136f 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -428,7 +428,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) | |||
428 | spin_unlock_irqrestore(&list->lock, flags); | 428 | spin_unlock_irqrestore(&list->lock, flags); |
429 | 429 | ||
430 | if (!sock_flag(sk, SOCK_DEAD)) | 430 | if (!sock_flag(sk, SOCK_DEAD)) |
431 | sk->sk_data_ready(sk, skb_len); | 431 | sk->sk_data_ready(sk); |
432 | return 0; | 432 | return 0; |
433 | } | 433 | } |
434 | EXPORT_SYMBOL(sock_queue_rcv_skb); | 434 | EXPORT_SYMBOL(sock_queue_rcv_skb); |
@@ -2196,7 +2196,7 @@ static void sock_def_error_report(struct sock *sk) | |||
2196 | rcu_read_unlock(); | 2196 | rcu_read_unlock(); |
2197 | } | 2197 | } |
2198 | 2198 | ||
2199 | static void sock_def_readable(struct sock *sk, int len) | 2199 | static void sock_def_readable(struct sock *sk) |
2200 | { | 2200 | { |
2201 | struct socket_wq *wq; | 2201 | struct socket_wq *wq; |
2202 | 2202 | ||