diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/8021q/vlan.c | 6 | ||||
| -rw-r--r-- | net/dsa/switch.c | 4 | ||||
| -rw-r--r-- | net/ipv4/tcp_input.c | 3 | ||||
| -rw-r--r-- | net/ipv4/tcp_offload.c | 12 | ||||
| -rw-r--r-- | net/rds/ib_recv.c | 10 |
5 files changed, 23 insertions, 12 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 9649579b5b9f..4a72ee4e2ae9 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
| @@ -376,6 +376,9 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, | |||
| 376 | dev->name); | 376 | dev->name); |
| 377 | vlan_vid_add(dev, htons(ETH_P_8021Q), 0); | 377 | vlan_vid_add(dev, htons(ETH_P_8021Q), 0); |
| 378 | } | 378 | } |
| 379 | if (event == NETDEV_DOWN && | ||
| 380 | (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER)) | ||
| 381 | vlan_vid_del(dev, htons(ETH_P_8021Q), 0); | ||
| 379 | 382 | ||
| 380 | vlan_info = rtnl_dereference(dev->vlan_info); | 383 | vlan_info = rtnl_dereference(dev->vlan_info); |
| 381 | if (!vlan_info) | 384 | if (!vlan_info) |
| @@ -423,9 +426,6 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, | |||
| 423 | struct net_device *tmp; | 426 | struct net_device *tmp; |
| 424 | LIST_HEAD(close_list); | 427 | LIST_HEAD(close_list); |
| 425 | 428 | ||
| 426 | if (dev->features & NETIF_F_HW_VLAN_CTAG_FILTER) | ||
| 427 | vlan_vid_del(dev, htons(ETH_P_8021Q), 0); | ||
| 428 | |||
| 429 | /* Put all VLANs for this dev in the down state too. */ | 429 | /* Put all VLANs for this dev in the down state too. */ |
| 430 | vlan_group_for_each_dev(grp, i, vlandev) { | 430 | vlan_group_for_each_dev(grp, i, vlandev) { |
| 431 | flgs = vlandev->flags; | 431 | flgs = vlandev->flags; |
diff --git a/net/dsa/switch.c b/net/dsa/switch.c index e6c06aa349a6..1e2929f4290a 100644 --- a/net/dsa/switch.c +++ b/net/dsa/switch.c | |||
| @@ -133,6 +133,8 @@ static int dsa_switch_mdb_add(struct dsa_switch *ds, | |||
| 133 | if (err) | 133 | if (err) |
| 134 | return err; | 134 | return err; |
| 135 | } | 135 | } |
| 136 | |||
| 137 | return 0; | ||
| 136 | } | 138 | } |
| 137 | 139 | ||
| 138 | for_each_set_bit(port, group, ds->num_ports) | 140 | for_each_set_bit(port, group, ds->num_ports) |
| @@ -180,6 +182,8 @@ static int dsa_switch_vlan_add(struct dsa_switch *ds, | |||
| 180 | if (err) | 182 | if (err) |
| 181 | return err; | 183 | return err; |
| 182 | } | 184 | } |
| 185 | |||
| 186 | return 0; | ||
| 183 | } | 187 | } |
| 184 | 188 | ||
| 185 | for_each_set_bit(port, members, ds->num_ports) | 189 | for_each_set_bit(port, members, ds->num_ports) |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index b2fc7163bd40..b6bb3cdfad09 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
| @@ -2615,7 +2615,6 @@ void tcp_simple_retransmit(struct sock *sk) | |||
| 2615 | struct tcp_sock *tp = tcp_sk(sk); | 2615 | struct tcp_sock *tp = tcp_sk(sk); |
| 2616 | struct sk_buff *skb; | 2616 | struct sk_buff *skb; |
| 2617 | unsigned int mss = tcp_current_mss(sk); | 2617 | unsigned int mss = tcp_current_mss(sk); |
| 2618 | u32 prior_lost = tp->lost_out; | ||
| 2619 | 2618 | ||
| 2620 | tcp_for_write_queue(skb, sk) { | 2619 | tcp_for_write_queue(skb, sk) { |
| 2621 | if (skb == tcp_send_head(sk)) | 2620 | if (skb == tcp_send_head(sk)) |
| @@ -2632,7 +2631,7 @@ void tcp_simple_retransmit(struct sock *sk) | |||
| 2632 | 2631 | ||
| 2633 | tcp_clear_retrans_hints_partial(tp); | 2632 | tcp_clear_retrans_hints_partial(tp); |
| 2634 | 2633 | ||
| 2635 | if (prior_lost == tp->lost_out) | 2634 | if (!tp->lost_out) |
| 2636 | return; | 2635 | return; |
| 2637 | 2636 | ||
| 2638 | if (tcp_is_reno(tp)) | 2637 | if (tcp_is_reno(tp)) |
diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c index 11f69bbf9307..b6a2aa1dcf56 100644 --- a/net/ipv4/tcp_offload.c +++ b/net/ipv4/tcp_offload.c | |||
| @@ -149,11 +149,19 @@ struct sk_buff *tcp_gso_segment(struct sk_buff *skb, | |||
| 149 | * is freed by GSO engine | 149 | * is freed by GSO engine |
| 150 | */ | 150 | */ |
| 151 | if (copy_destructor) { | 151 | if (copy_destructor) { |
| 152 | int delta; | ||
| 153 | |||
| 152 | swap(gso_skb->sk, skb->sk); | 154 | swap(gso_skb->sk, skb->sk); |
| 153 | swap(gso_skb->destructor, skb->destructor); | 155 | swap(gso_skb->destructor, skb->destructor); |
| 154 | sum_truesize += skb->truesize; | 156 | sum_truesize += skb->truesize; |
| 155 | refcount_add(sum_truesize - gso_skb->truesize, | 157 | delta = sum_truesize - gso_skb->truesize; |
| 156 | &skb->sk->sk_wmem_alloc); | 158 | /* In some pathological cases, delta can be negative. |
| 159 | * We need to either use refcount_add() or refcount_sub_and_test() | ||
| 160 | */ | ||
| 161 | if (likely(delta >= 0)) | ||
| 162 | refcount_add(delta, &skb->sk->sk_wmem_alloc); | ||
| 163 | else | ||
| 164 | WARN_ON_ONCE(refcount_sub_and_test(-delta, &skb->sk->sk_wmem_alloc)); | ||
| 157 | } | 165 | } |
| 158 | 166 | ||
| 159 | delta = htonl(oldlen + (skb_tail_pointer(skb) - | 167 | delta = htonl(oldlen + (skb_tail_pointer(skb) - |
diff --git a/net/rds/ib_recv.c b/net/rds/ib_recv.c index 9722bf839d9d..b4e421aa9727 100644 --- a/net/rds/ib_recv.c +++ b/net/rds/ib_recv.c | |||
| @@ -410,14 +410,14 @@ void rds_ib_recv_refill(struct rds_connection *conn, int prefill, gfp_t gfp) | |||
| 410 | break; | 410 | break; |
| 411 | } | 411 | } |
| 412 | 412 | ||
| 413 | /* XXX when can this fail? */ | 413 | rdsdebug("recv %p ibinc %p page %p addr %lu\n", recv, |
| 414 | ret = ib_post_recv(ic->i_cm_id->qp, &recv->r_wr, &failed_wr); | ||
| 415 | rdsdebug("recv %p ibinc %p page %p addr %lu ret %d\n", recv, | ||
| 416 | recv->r_ibinc, sg_page(&recv->r_frag->f_sg), | 414 | recv->r_ibinc, sg_page(&recv->r_frag->f_sg), |
| 417 | (long) ib_sg_dma_address( | 415 | (long) ib_sg_dma_address( |
| 418 | ic->i_cm_id->device, | 416 | ic->i_cm_id->device, |
| 419 | &recv->r_frag->f_sg), | 417 | &recv->r_frag->f_sg)); |
| 420 | ret); | 418 | |
| 419 | /* XXX when can this fail? */ | ||
| 420 | ret = ib_post_recv(ic->i_cm_id->qp, &recv->r_wr, &failed_wr); | ||
| 421 | if (ret) { | 421 | if (ret) { |
| 422 | rds_ib_conn_error(conn, "recv post on " | 422 | rds_ib_conn_error(conn, "recv post on " |
| 423 | "%pI4 returned %d, disconnecting and " | 423 | "%pI4 returned %d, disconnecting and " |
