diff options
Diffstat (limited to 'net/can/af_can.c')
-rw-r--r-- | net/can/af_can.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/net/can/af_can.c b/net/can/af_can.c index ddac1ee2ed20..c48e5220bbac 100644 --- a/net/can/af_can.c +++ b/net/can/af_can.c | |||
@@ -516,7 +516,6 @@ void can_rx_unregister(struct net_device *dev, canid_t can_id, canid_t mask, | |||
516 | { | 516 | { |
517 | struct receiver *r = NULL; | 517 | struct receiver *r = NULL; |
518 | struct hlist_head *rl; | 518 | struct hlist_head *rl; |
519 | struct hlist_node *next; | ||
520 | struct dev_rcv_lists *d; | 519 | struct dev_rcv_lists *d; |
521 | 520 | ||
522 | if (dev && dev->type != ARPHRD_CAN) | 521 | if (dev && dev->type != ARPHRD_CAN) |
@@ -540,7 +539,7 @@ void can_rx_unregister(struct net_device *dev, canid_t can_id, canid_t mask, | |||
540 | * been registered before. | 539 | * been registered before. |
541 | */ | 540 | */ |
542 | 541 | ||
543 | hlist_for_each_entry_rcu(r, next, rl, list) { | 542 | hlist_for_each_entry_rcu(r, rl, list) { |
544 | if (r->can_id == can_id && r->mask == mask && | 543 | if (r->can_id == can_id && r->mask == mask && |
545 | r->func == func && r->data == data) | 544 | r->func == func && r->data == data) |
546 | break; | 545 | break; |
@@ -552,7 +551,7 @@ void can_rx_unregister(struct net_device *dev, canid_t can_id, canid_t mask, | |||
552 | * will be NULL, while r will point to the last item of the list. | 551 | * will be NULL, while r will point to the last item of the list. |
553 | */ | 552 | */ |
554 | 553 | ||
555 | if (!next) { | 554 | if (!r) { |
556 | printk(KERN_ERR "BUG: receive list entry not found for " | 555 | printk(KERN_ERR "BUG: receive list entry not found for " |
557 | "dev %s, id %03X, mask %03X\n", | 556 | "dev %s, id %03X, mask %03X\n", |
558 | DNAME(dev), can_id, mask); | 557 | DNAME(dev), can_id, mask); |
@@ -590,7 +589,6 @@ static inline void deliver(struct sk_buff *skb, struct receiver *r) | |||
590 | static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb) | 589 | static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb) |
591 | { | 590 | { |
592 | struct receiver *r; | 591 | struct receiver *r; |
593 | struct hlist_node *n; | ||
594 | int matches = 0; | 592 | int matches = 0; |
595 | struct can_frame *cf = (struct can_frame *)skb->data; | 593 | struct can_frame *cf = (struct can_frame *)skb->data; |
596 | canid_t can_id = cf->can_id; | 594 | canid_t can_id = cf->can_id; |
@@ -600,7 +598,7 @@ static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb) | |||
600 | 598 | ||
601 | if (can_id & CAN_ERR_FLAG) { | 599 | if (can_id & CAN_ERR_FLAG) { |
602 | /* check for error message frame entries only */ | 600 | /* check for error message frame entries only */ |
603 | hlist_for_each_entry_rcu(r, n, &d->rx[RX_ERR], list) { | 601 | hlist_for_each_entry_rcu(r, &d->rx[RX_ERR], list) { |
604 | if (can_id & r->mask) { | 602 | if (can_id & r->mask) { |
605 | deliver(skb, r); | 603 | deliver(skb, r); |
606 | matches++; | 604 | matches++; |
@@ -610,13 +608,13 @@ static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb) | |||
610 | } | 608 | } |
611 | 609 | ||
612 | /* check for unfiltered entries */ | 610 | /* check for unfiltered entries */ |
613 | hlist_for_each_entry_rcu(r, n, &d->rx[RX_ALL], list) { | 611 | hlist_for_each_entry_rcu(r, &d->rx[RX_ALL], list) { |
614 | deliver(skb, r); | 612 | deliver(skb, r); |
615 | matches++; | 613 | matches++; |
616 | } | 614 | } |
617 | 615 | ||
618 | /* check for can_id/mask entries */ | 616 | /* check for can_id/mask entries */ |
619 | hlist_for_each_entry_rcu(r, n, &d->rx[RX_FIL], list) { | 617 | hlist_for_each_entry_rcu(r, &d->rx[RX_FIL], list) { |
620 | if ((can_id & r->mask) == r->can_id) { | 618 | if ((can_id & r->mask) == r->can_id) { |
621 | deliver(skb, r); | 619 | deliver(skb, r); |
622 | matches++; | 620 | matches++; |
@@ -624,7 +622,7 @@ static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb) | |||
624 | } | 622 | } |
625 | 623 | ||
626 | /* check for inverted can_id/mask entries */ | 624 | /* check for inverted can_id/mask entries */ |
627 | hlist_for_each_entry_rcu(r, n, &d->rx[RX_INV], list) { | 625 | hlist_for_each_entry_rcu(r, &d->rx[RX_INV], list) { |
628 | if ((can_id & r->mask) != r->can_id) { | 626 | if ((can_id & r->mask) != r->can_id) { |
629 | deliver(skb, r); | 627 | deliver(skb, r); |
630 | matches++; | 628 | matches++; |
@@ -636,7 +634,7 @@ static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb) | |||
636 | return matches; | 634 | return matches; |
637 | 635 | ||
638 | if (can_id & CAN_EFF_FLAG) { | 636 | if (can_id & CAN_EFF_FLAG) { |
639 | hlist_for_each_entry_rcu(r, n, &d->rx[RX_EFF], list) { | 637 | hlist_for_each_entry_rcu(r, &d->rx[RX_EFF], list) { |
640 | if (r->can_id == can_id) { | 638 | if (r->can_id == can_id) { |
641 | deliver(skb, r); | 639 | deliver(skb, r); |
642 | matches++; | 640 | matches++; |
@@ -644,7 +642,7 @@ static int can_rcv_filter(struct dev_rcv_lists *d, struct sk_buff *skb) | |||
644 | } | 642 | } |
645 | } else { | 643 | } else { |
646 | can_id &= CAN_SFF_MASK; | 644 | can_id &= CAN_SFF_MASK; |
647 | hlist_for_each_entry_rcu(r, n, &d->rx_sff[can_id], list) { | 645 | hlist_for_each_entry_rcu(r, &d->rx_sff[can_id], list) { |
648 | deliver(skb, r); | 646 | deliver(skb, r); |
649 | matches++; | 647 | matches++; |
650 | } | 648 | } |