diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/bluetooth/rfcomm/core.c | 2 | ||||
| -rw-r--r-- | net/dccp/ccids/ccid3.c | 13 | ||||
| -rw-r--r-- | net/dccp/ipv4.c | 4 |
3 files changed, 7 insertions, 12 deletions
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index eb62558e9b09..0c2c93735e93 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c | |||
| @@ -423,8 +423,8 @@ static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err) | |||
| 423 | 423 | ||
| 424 | rfcomm_dlc_lock(d); | 424 | rfcomm_dlc_lock(d); |
| 425 | d->state = BT_CLOSED; | 425 | d->state = BT_CLOSED; |
| 426 | rfcomm_dlc_unlock(d); | ||
| 427 | d->state_change(d, err); | 426 | d->state_change(d, err); |
| 427 | rfcomm_dlc_unlock(d); | ||
| 428 | 428 | ||
| 429 | skb_queue_purge(&d->tx_queue); | 429 | skb_queue_purge(&d->tx_queue); |
| 430 | rfcomm_dlc_unlink(d); | 430 | rfcomm_dlc_unlink(d); |
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c index cd61dea2eea1..f813077234b7 100644 --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c | |||
| @@ -193,22 +193,17 @@ static inline void ccid3_hc_tx_update_s(struct ccid3_hc_tx_sock *hctx, int len) | |||
| 193 | 193 | ||
| 194 | /* | 194 | /* |
| 195 | * Update Window Counter using the algorithm from [RFC 4342, 8.1]. | 195 | * Update Window Counter using the algorithm from [RFC 4342, 8.1]. |
| 196 | * The algorithm is not applicable if RTT < 4 microseconds. | 196 | * As elsewhere, RTT > 0 is assumed by using dccp_sample_rtt(). |
| 197 | */ | 197 | */ |
| 198 | static inline void ccid3_hc_tx_update_win_count(struct ccid3_hc_tx_sock *hctx, | 198 | static inline void ccid3_hc_tx_update_win_count(struct ccid3_hc_tx_sock *hctx, |
| 199 | ktime_t now) | 199 | ktime_t now) |
| 200 | { | 200 | { |
| 201 | u32 quarter_rtts; | 201 | u32 delta = ktime_us_delta(now, hctx->ccid3hctx_t_last_win_count), |
| 202 | 202 | quarter_rtts = (4 * delta) / hctx->ccid3hctx_rtt; | |
| 203 | if (unlikely(hctx->ccid3hctx_rtt < 4)) /* avoid divide-by-zero */ | ||
| 204 | return; | ||
| 205 | |||
| 206 | quarter_rtts = ktime_us_delta(now, hctx->ccid3hctx_t_last_win_count); | ||
| 207 | quarter_rtts /= hctx->ccid3hctx_rtt / 4; | ||
| 208 | 203 | ||
| 209 | if (quarter_rtts > 0) { | 204 | if (quarter_rtts > 0) { |
| 210 | hctx->ccid3hctx_t_last_win_count = now; | 205 | hctx->ccid3hctx_t_last_win_count = now; |
| 211 | hctx->ccid3hctx_last_win_count += min_t(u32, quarter_rtts, 5); | 206 | hctx->ccid3hctx_last_win_count += min(quarter_rtts, 5U); |
| 212 | hctx->ccid3hctx_last_win_count &= 0xF; /* mod 16 */ | 207 | hctx->ccid3hctx_last_win_count &= 0xF; /* mod 16 */ |
| 213 | } | 208 | } |
| 214 | } | 209 | } |
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index b348dd70c685..c22a3780c14e 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
| @@ -739,8 +739,8 @@ int dccp_invalid_packet(struct sk_buff *skb) | |||
| 739 | * If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet | 739 | * If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet |
| 740 | * has short sequence numbers), drop packet and return | 740 | * has short sequence numbers), drop packet and return |
| 741 | */ | 741 | */ |
| 742 | if (dh->dccph_type >= DCCP_PKT_DATA && | 742 | if ((dh->dccph_type < DCCP_PKT_DATA || |
| 743 | dh->dccph_type <= DCCP_PKT_DATAACK && dh->dccph_x == 0) { | 743 | dh->dccph_type > DCCP_PKT_DATAACK) && dh->dccph_x == 0) { |
| 744 | DCCP_WARN("P.type (%s) not Data || [Data]Ack, while P.X == 0\n", | 744 | DCCP_WARN("P.type (%s) not Data || [Data]Ack, while P.X == 0\n", |
| 745 | dccp_packet_name(dh->dccph_type)); | 745 | dccp_packet_name(dh->dccph_type)); |
| 746 | return 1; | 746 | return 1; |
