|
@@ -786,6 +786,7 @@ static void rxrpc_call_life_expired(unsigned long _call)
|
|
|
|
|
|
/*
|
|
|
* handle resend timer expiry
|
|
|
+ * - may not take call->state_lock as this can deadlock against del_timer_sync()
|
|
|
*/
|
|
|
static void rxrpc_resend_time_expired(unsigned long _call)
|
|
|
{
|
|
@@ -796,12 +797,9 @@ static void rxrpc_resend_time_expired(unsigned long _call)
|
|
|
if (call->state >= RXRPC_CALL_COMPLETE)
|
|
|
return;
|
|
|
|
|
|
- read_lock_bh(&call->state_lock);
|
|
|
clear_bit(RXRPC_CALL_RUN_RTIMER, &call->flags);
|
|
|
- if (call->state < RXRPC_CALL_COMPLETE &&
|
|
|
- !test_and_set_bit(RXRPC_CALL_RESEND_TIMER, &call->events))
|
|
|
+ if (!test_and_set_bit(RXRPC_CALL_RESEND_TIMER, &call->events))
|
|
|
rxrpc_queue_call(call);
|
|
|
- read_unlock_bh(&call->state_lock);
|
|
|
}
|
|
|
|
|
|
/*
|