From: hartkopp Date: Thu, 18 Feb 2010 21:43:42 +0000 (+0000) Subject: Correct frame counter in gw_rcv. X-Git-Url: http://rtime.felk.cvut.cz/gitweb/socketcan-devel.git/commitdiff_plain/83be9721dfaa72547263c05b6c9104455594acb2 Correct frame counter in gw_rcv. Fix error path in gw_create_job() to prevent double put of netdevs. git-svn-id: svn://svn.berlios.de//socketcan/trunk@1128 030b6a49-0b11-0410-94ab-b0dab22257f2 --- diff --git a/kernel/2.6/net/can/gw.c b/kernel/2.6/net/can/gw.c index 5ccf0c2..dafd079 100644 --- a/kernel/2.6/net/can/gw.c +++ b/kernel/2.6/net/can/gw.c @@ -185,8 +185,6 @@ static void gw_rcv(struct sk_buff *skb, void *data) return; } - gwj->handled_frames++; - /* mark routed frames with a 'special' sk value */ nskb->sk = GW_SK_MAGIC; nskb->dev = gwj->dst_dev; @@ -201,6 +199,8 @@ static void gw_rcv(struct sk_buff *skb, void *data) /* send to netdevice */ if (can_send(nskb, gwj->flags & CAN_TX_LOOPBACK)) gwj->dropped_frames++; + else + gwj->handled_frames++; } static inline int can_gw_register_filter(struct gw_job *gwj) @@ -409,8 +409,10 @@ static int gw_create_job(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) dev_put(gwj->src_dev); dev_put(gwj->dst_dev); - if (!err) - return 0; + if (err) + goto fail; + + return 0; put_src_dst_fail: dev_put(gwj->dst_dev);