aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bonding/bond_alb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/bonding/bond_alb.c')
-rw-r--r--drivers/net/bonding/bond_alb.c12
1 files changed, 7 insertions, 5 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
345static void rlb_arp_recv(struct sk_buff *skb, struct bonding *bond, 345static 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 }
372out:
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 */