diff options
| -rw-r--r-- | net/rxrpc/ar-ack.c | 3 | ||||
| -rw-r--r-- | net/rxrpc/ar-call.c | 6 |
2 files changed, 5 insertions, 4 deletions
diff --git a/net/rxrpc/ar-ack.c b/net/rxrpc/ar-ack.c index 2714da167fb8..b6ffe4e1b84a 100644 --- a/net/rxrpc/ar-ack.c +++ b/net/rxrpc/ar-ack.c | |||
| @@ -245,6 +245,9 @@ static void rxrpc_resend_timer(struct rxrpc_call *call) | |||
| 245 | _enter("%d,%d,%d", | 245 | _enter("%d,%d,%d", |
| 246 | call->acks_tail, call->acks_unacked, call->acks_head); | 246 | call->acks_tail, call->acks_unacked, call->acks_head); |
| 247 | 247 | ||
| 248 | if (call->state >= RXRPC_CALL_COMPLETE) | ||
| 249 | return; | ||
| 250 | |||
| 248 | resend = 0; | 251 | resend = 0; |
| 249 | resend_at = 0; | 252 | resend_at = 0; |
| 250 | 253 | ||
diff --git a/net/rxrpc/ar-call.c b/net/rxrpc/ar-call.c index 909d092de9f4..bf656c230ba9 100644 --- a/net/rxrpc/ar-call.c +++ b/net/rxrpc/ar-call.c | |||
| @@ -786,6 +786,7 @@ static void rxrpc_call_life_expired(unsigned long _call) | |||
| 786 | 786 | ||
| 787 | /* | 787 | /* |
| 788 | * handle resend timer expiry | 788 | * handle resend timer expiry |
| 789 | * - may not take call->state_lock as this can deadlock against del_timer_sync() | ||
| 789 | */ | 790 | */ |
| 790 | static void rxrpc_resend_time_expired(unsigned long _call) | 791 | static void rxrpc_resend_time_expired(unsigned long _call) |
| 791 | { | 792 | { |
| @@ -796,12 +797,9 @@ static void rxrpc_resend_time_expired(unsigned long _call) | |||
| 796 | if (call->state >= RXRPC_CALL_COMPLETE) | 797 | if (call->state >= RXRPC_CALL_COMPLETE) |
| 797 | return; | 798 | return; |
| 798 | 799 | ||
| 799 | read_lock_bh(&call->state_lock); | ||
| 800 | clear_bit(RXRPC_CALL_RUN_RTIMER, &call->flags); | 800 | clear_bit(RXRPC_CALL_RUN_RTIMER, &call->flags); |
| 801 | if (call->state < RXRPC_CALL_COMPLETE && | 801 | if (!test_and_set_bit(RXRPC_CALL_RESEND_TIMER, &call->events)) |
| 802 | !test_and_set_bit(RXRPC_CALL_RESEND_TIMER, &call->events)) | ||
| 803 | rxrpc_queue_call(call); | 802 | rxrpc_queue_call(call); |
| 804 | read_unlock_bh(&call->state_lock); | ||
| 805 | } | 803 | } |
| 806 | 804 | ||
| 807 | /* | 805 | /* |
