bridge: eliminate call by reference
[powerpc.git] / net / bridge / br_input.c
index a260679..2f5c379 100644 (file)
@@ -121,13 +121,11 @@ static inline int is_link_local(const unsigned char *dest)
 
 /*
  * Called via br_handle_frame_hook.
- * Return 0 if *pskb should be processed furthur
- *       1 if *pskb is handled
+ * Return NULL if skb is handled
  * note: already called with rcu_read_lock (preempt_disabled)
  */
-int br_handle_frame(struct net_bridge_port *p, struct sk_buff **pskb)
+struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb)
 {
-       struct sk_buff *skb = *pskb;
        const unsigned char *dest = eth_hdr(skb)->h_dest;
 
        if (!is_valid_ether_addr(eth_hdr(skb)->h_source))
@@ -135,15 +133,15 @@ int br_handle_frame(struct net_bridge_port *p, struct sk_buff **pskb)
 
        if (unlikely(is_link_local(dest))) {
                skb->pkt_type = PACKET_HOST;
-               return NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
-                              NULL, br_handle_local_finish) != 0;
+
+               return (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
+                               NULL, br_handle_local_finish) == 0) ? skb : NULL;
        }
 
        if (p->state == BR_STATE_FORWARDING || p->state == BR_STATE_LEARNING) {
                if (br_should_route_hook) {
-                       if (br_should_route_hook(pskb))
-                               return 0;
-                       skb = *pskb;
+                       if (br_should_route_hook(&skb))
+                               return skb;
                        dest = eth_hdr(skb)->h_dest;
                }
 
@@ -152,10 +150,10 @@ int br_handle_frame(struct net_bridge_port *p, struct sk_buff **pskb)
 
                NF_HOOK(PF_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL,
                        br_handle_frame_finish);
-               return 1;
+               return NULL;
        }
 
 err:
        kfree_skb(skb);
-       return 1;
+       return NULL;
 }