From: Zhang Changzhong <zhangchangzhong@huawei.com> To: robin@protonic.nl, linux@rempel-privat.de, kernel@pengutronix.de, socketcan@hartkopp.net, mkl@pengutronix.de, davem@davemloft.net, kuba@kernel.org Cc: linux-can@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net 3/4] can: j1939: abort multipacket broadcast session when timeout occurs Date: Wed, 5 Aug 2020 11:50:24 +0800 [thread overview] Message-ID: <1596599425-5534-4-git-send-email-zhangchangzhong@huawei.com> (raw) In-Reply-To: <1596599425-5534-1-git-send-email-zhangchangzhong@huawei.com> If timeout occurs, j1939_tp_rxtimer() first calls hrtimer_start() to restart rxtimer, and then calls __j1939_session_cancel() to set session->state = J1939_SESSION_WAITING_ABORT. At next timeout expiration, because of the J1939_SESSION_WAITING_ABORT session state j1939_tp_rxtimer() will call j1939_session_deactivate_activate_next() to deactivate current session, and rxtimer won't be set. But for multipacket broadcast session, __j1939_session_cancel() don't set session->state = J1939_SESSION_WAITING_ABORT, thus current session won't be deactivate and hrtimer_start() is called to start new rxtimer again and again. So fix it by moving session->state = J1939_SESSION_WAITING_ABORT out of if (!j1939_cb_is_broadcast(&session->skcb)) statement. Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol") Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com> --- net/can/j1939/transport.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c index dd6a120..5757f9f 100644 --- a/net/can/j1939/transport.c +++ b/net/can/j1939/transport.c @@ -1055,9 +1055,9 @@ static void __j1939_session_cancel(struct j1939_session *session, lockdep_assert_held(&session->priv->active_session_list_lock); session->err = j1939_xtp_abort_to_errno(priv, err); + session->state = J1939_SESSION_WAITING_ABORT; /* do not send aborts on incoming broadcasts */ if (!j1939_cb_is_broadcast(&session->skcb)) { - session->state = J1939_SESSION_WAITING_ABORT; j1939_xtp_tx_abort(priv, &session->skcb, !session->transmission, err, session->skcb.addr.pgn); -- 2.9.5
WARNING: multiple messages have this Message-ID (diff)
From: Zhang Changzhong <zhangchangzhong@huawei.com> To: <robin@protonic.nl>, <linux@rempel-privat.de>, <kernel@pengutronix.de>, <socketcan@hartkopp.net>, <mkl@pengutronix.de>, <davem@davemloft.net>, <kuba@kernel.org> Cc: <linux-can@vger.kernel.org>, <netdev@vger.kernel.org>, <linux-kernel@vger.kernel.org> Subject: [PATCH net 3/4] can: j1939: abort multipacket broadcast session when timeout occurs Date: Wed, 5 Aug 2020 11:50:24 +0800 [thread overview] Message-ID: <1596599425-5534-4-git-send-email-zhangchangzhong@huawei.com> (raw) In-Reply-To: <1596599425-5534-1-git-send-email-zhangchangzhong@huawei.com> If timeout occurs, j1939_tp_rxtimer() first calls hrtimer_start() to restart rxtimer, and then calls __j1939_session_cancel() to set session->state = J1939_SESSION_WAITING_ABORT. At next timeout expiration, because of the J1939_SESSION_WAITING_ABORT session state j1939_tp_rxtimer() will call j1939_session_deactivate_activate_next() to deactivate current session, and rxtimer won't be set. But for multipacket broadcast session, __j1939_session_cancel() don't set session->state = J1939_SESSION_WAITING_ABORT, thus current session won't be deactivate and hrtimer_start() is called to start new rxtimer again and again. So fix it by moving session->state = J1939_SESSION_WAITING_ABORT out of if (!j1939_cb_is_broadcast(&session->skcb)) statement. Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol") Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com> --- net/can/j1939/transport.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/can/j1939/transport.c b/net/can/j1939/transport.c index dd6a120..5757f9f 100644 --- a/net/can/j1939/transport.c +++ b/net/can/j1939/transport.c @@ -1055,9 +1055,9 @@ static void __j1939_session_cancel(struct j1939_session *session, lockdep_assert_held(&session->priv->active_session_list_lock); session->err = j1939_xtp_abort_to_errno(priv, err); + session->state = J1939_SESSION_WAITING_ABORT; /* do not send aborts on incoming broadcasts */ if (!j1939_cb_is_broadcast(&session->skcb)) { - session->state = J1939_SESSION_WAITING_ABORT; j1939_xtp_tx_abort(priv, &session->skcb, !session->transmission, err, session->skcb.addr.pgn); -- 2.9.5
next prev parent reply other threads:[~2020-08-05 3:50 UTC|newest] Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-08-05 3:50 [PATCH net 0/4] support multipacket broadcast message Zhang Changzhong 2020-08-05 3:50 ` Zhang Changzhong 2020-08-05 3:50 ` [PATCH net 1/4] can: j1939: fix support for " Zhang Changzhong 2020-08-05 3:50 ` Zhang Changzhong 2020-08-05 3:50 ` [PATCH net 2/4] can: j1939: cancel rxtimer on multipacket broadcast session complete Zhang Changzhong 2020-08-05 3:50 ` Zhang Changzhong 2020-08-05 3:50 ` Zhang Changzhong [this message] 2020-08-05 3:50 ` [PATCH net 3/4] can: j1939: abort multipacket broadcast session when timeout occurs Zhang Changzhong 2020-08-05 3:50 ` [PATCH net 4/4] can: j1939: add rxtimer for multipacket broadcast session Zhang Changzhong 2020-08-05 3:50 ` Zhang Changzhong 2020-08-06 16:10 ` [PATCH net 0/4] support multipacket broadcast message Oleksij Rempel 2020-08-07 9:36 ` Zhang Changzhong 2020-08-07 9:36 ` Zhang Changzhong 2020-08-07 13:15 ` Oleksij Rempel 2020-08-14 11:01 ` Oleksij Rempel
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1596599425-5534-4-git-send-email-zhangchangzhong@huawei.com \ --to=zhangchangzhong@huawei.com \ --cc=davem@davemloft.net \ --cc=kernel@pengutronix.de \ --cc=kuba@kernel.org \ --cc=linux-can@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux@rempel-privat.de \ --cc=mkl@pengutronix.de \ --cc=netdev@vger.kernel.org \ --cc=robin@protonic.nl \ --cc=socketcan@hartkopp.net \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.