diff options
| -rw-r--r-- | drivers/net/bonding/bond_alb.c | 12 | ||||
| -rw-r--r-- | drivers/net/bonding/bonding.h | 2 | ||||
| -rw-r--r-- | net/openvswitch/datapath.c | 2 |
3 files changed, 9 insertions, 7 deletions
diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c index 9abfde479316..2e1f8066f1a8 100644 --- a/drivers/net/bonding/bond_alb.c +++ b/drivers/net/bonding/bond_alb.c | |||
| @@ -342,26 +342,26 @@ static void rlb_update_entry_from_arp(struct bonding *bond, struct arp_pkt *arp) | |||
| 342 | _unlock_rx_hashtbl_bh(bond); | 342 | _unlock_rx_hashtbl_bh(bond); |
| 343 | } | 343 | } |
| 344 | 344 | ||
| 345 | static void rlb_arp_recv(struct sk_buff *skb, struct bonding *bond, | 345 | static int rlb_arp_recv(struct sk_buff *skb, struct bonding *bond, |
| 346 | struct slave *slave) | 346 | struct slave *slave) |
| 347 | { | 347 | { |
| 348 | struct arp_pkt *arp; | 348 | struct arp_pkt *arp; |
| 349 | 349 | ||
| 350 | if (skb->protocol != cpu_to_be16(ETH_P_ARP)) | 350 | if (skb->protocol != cpu_to_be16(ETH_P_ARP)) |
| 351 | return; | 351 | goto out; |
| 352 | 352 | ||
| 353 | arp = (struct arp_pkt *) skb->data; | 353 | arp = (struct arp_pkt *) skb->data; |
| 354 | if (!arp) { | 354 | if (!arp) { |
| 355 | pr_debug("Packet has no ARP data\n"); | 355 | pr_debug("Packet has no ARP data\n"); |
| 356 | return; | 356 | goto out; |
| 357 | } | 357 | } |
| 358 | 358 | ||
| 359 | if (!pskb_may_pull(skb, arp_hdr_len(bond->dev))) | 359 | if (!pskb_may_pull(skb, arp_hdr_len(bond->dev))) |
| 360 | return; | 360 | goto out; |
| 361 | 361 | ||
| 362 | if (skb->len < sizeof(struct arp_pkt)) { | 362 | if (skb->len < sizeof(struct arp_pkt)) { |
| 363 | pr_debug("Packet is too small to be an ARP\n"); | 363 | pr_debug("Packet is too small to be an ARP\n"); |
| 364 | return; | 364 | goto out; |
| 365 | } | 365 | } |
| 366 | 366 | ||
| 367 | if (arp->op_code == htons(ARPOP_REPLY)) { | 367 | if (arp->op_code == htons(ARPOP_REPLY)) { |
| @@ -369,6 +369,8 @@ static void rlb_arp_recv(struct sk_buff *skb, struct bonding *bond, | |||
| 369 | rlb_update_entry_from_arp(bond, arp); | 369 | rlb_update_entry_from_arp(bond, arp); |
| 370 | pr_debug("Server received an ARP Reply from client\n"); | 370 | pr_debug("Server received an ARP Reply from client\n"); |
| 371 | } | 371 | } |
| 372 | out: | ||
| 373 | return RX_HANDLER_ANOTHER; | ||
| 372 | } | 374 | } |
| 373 | 375 | ||
| 374 | /* Caller must hold bond lock for read */ | 376 | /* Caller must hold bond lock for read */ |
diff --git a/drivers/net/bonding/bonding.h b/drivers/net/bonding/bonding.h index 9f2bae6616d3..4581aa5ccaba 100644 --- a/drivers/net/bonding/bonding.h +++ b/drivers/net/bonding/bonding.h | |||
| @@ -218,7 +218,7 @@ struct bonding { | |||
| 218 | struct slave *primary_slave; | 218 | struct slave *primary_slave; |
| 219 | bool force_primary; | 219 | bool force_primary; |
| 220 | s32 slave_cnt; /* never change this value outside the attach/detach wrappers */ | 220 | s32 slave_cnt; /* never change this value outside the attach/detach wrappers */ |
| 221 | void (*recv_probe)(struct sk_buff *, struct bonding *, | 221 | int (*recv_probe)(struct sk_buff *, struct bonding *, |
| 222 | struct slave *); | 222 | struct slave *); |
| 223 | rwlock_t lock; | 223 | rwlock_t lock; |
| 224 | rwlock_t curr_slave_lock; | 224 | rwlock_t curr_slave_lock; |
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c index 777716bc80f7..e66341ec455c 100644 --- a/net/openvswitch/datapath.c +++ b/net/openvswitch/datapath.c | |||
| @@ -321,7 +321,7 @@ static int queue_userspace_packet(int dp_ifindex, struct sk_buff *skb, | |||
| 321 | return -ENOMEM; | 321 | return -ENOMEM; |
| 322 | 322 | ||
| 323 | nskb = __vlan_put_tag(nskb, vlan_tx_tag_get(nskb)); | 323 | nskb = __vlan_put_tag(nskb, vlan_tx_tag_get(nskb)); |
| 324 | if (!skb) | 324 | if (!nskb) |
| 325 | return -ENOMEM; | 325 | return -ENOMEM; |
| 326 | 326 | ||
| 327 | nskb->vlan_tci = 0; | 327 | nskb->vlan_tci = 0; |
