Skip to content

Commit 4015c63

Browse files
author
Xin Long
committed
sctp: do not check hb_timer.expires when resetting hb_timer
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2167094 Tested: bug reproducer Conflicts: - Context difference due to missing 8032bf1 in RHEL-9. commit 8f35ae1 Author: Xin Long <lucien.xin@gmail.com> Date: Mon Jan 30 11:25:33 2023 -0500 sctp: do not check hb_timer.expires when resetting hb_timer It tries to avoid the frequently hb_timer refresh in commit ba6f5e3 ("sctp: avoid refreshing heartbeat timer too often"), and it only allows mod_timer when the new expires is after hb_timer.expires. It means even a much shorter interval for hb timer gets applied, it will have to wait until the current hb timer to time out. In sctp_do_8_2_transport_strike(), when a transport enters PF state, it expects to update the hb timer to resend a heartbeat every rto after calling sctp_transport_reset_hb_timer(), which will not work as the change mentioned above. The frequently hb_timer refresh was caused by sctp_transport_reset_timers() called in sctp_outq_flush() and it was already removed in the commit above. So we don't have to check hb_timer.expires when resetting hb_timer as it is now not called very often. Fixes: ba6f5e3 ("sctp: avoid refreshing heartbeat timer too often") Signed-off-by: Xin Long <lucien.xin@gmail.com> Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Link: https://lore.kernel.org/r/d958c06985713ec84049a2d5664879802710179a.1675095933.git.lucien.xin@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Xin Long <lxin@redhat.com>
1 parent 71e807d commit 4015c63

File tree

1 file changed

+1
-3
lines changed

1 file changed

+1
-3
lines changed

net/sctp/transport.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,7 @@ void sctp_transport_reset_hb_timer(struct sctp_transport *transport)
196196

197197
/* When a data chunk is sent, reset the heartbeat interval. */
198198
expires = jiffies + sctp_transport_timeout(transport);
199-
if ((time_before(transport->hb_timer.expires, expires) ||
200-
!timer_pending(&transport->hb_timer)) &&
201-
!mod_timer(&transport->hb_timer,
199+
if (!mod_timer(&transport->hb_timer,
202200
expires + prandom_u32_max(transport->rto)))
203201
sctp_transport_hold(transport);
204202
}

0 commit comments

Comments
 (0)