can: bcm: check the result of can_send() in bcm_can_tx()
[ Upstream commit 3fd7bfd28cfd68ae80a2fe92ea1615722cc2ee6e ] If can_send() fail, it should not update frames_abs counter in bcm_can_tx(). Add the result check for can_send() in bcm_can_tx(). Suggested-by: Marc Kleine-Budde <mkl@pengutronix.de> Suggested-by: Oliver Hartkopp <socketcan@hartkopp.net> Signed-off-by: Ziyang Xuan <william.xuanziyang@huawei.com> Link: https://lore.kernel.org/all/9851878e74d6d37aee2f1ee76d68361a46f89458.1663206163.git.william.xuanziyang@huawei.com Acked-by: Oliver Hartkopp <socketcan@hartkopp.net> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
671fee73e0
commit
dae06957f8
@ -273,6 +273,7 @@ static void bcm_can_tx(struct bcm_op *op)
|
|||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
struct canfd_frame *cf = op->frames + op->cfsiz * op->currframe;
|
struct canfd_frame *cf = op->frames + op->cfsiz * op->currframe;
|
||||||
|
int err;
|
||||||
|
|
||||||
/* no target device? => exit */
|
/* no target device? => exit */
|
||||||
if (!op->ifindex)
|
if (!op->ifindex)
|
||||||
@ -297,12 +298,12 @@ static void bcm_can_tx(struct bcm_op *op)
|
|||||||
/* send with loopback */
|
/* send with loopback */
|
||||||
skb->dev = dev;
|
skb->dev = dev;
|
||||||
can_skb_set_owner(skb, op->sk);
|
can_skb_set_owner(skb, op->sk);
|
||||||
can_send(skb, 1);
|
err = can_send(skb, 1);
|
||||||
|
if (!err)
|
||||||
/* update statistics */
|
|
||||||
op->currframe++;
|
|
||||||
op->frames_abs++;
|
op->frames_abs++;
|
||||||
|
|
||||||
|
op->currframe++;
|
||||||
|
|
||||||
/* reached last frame? */
|
/* reached last frame? */
|
||||||
if (op->currframe >= op->nframes)
|
if (op->currframe >= op->nframes)
|
||||||
op->currframe = 0;
|
op->currframe = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user