rxrpc: When clearing a socket, clear the call sets in the right order
When clearing a socket, we should clear the securing-in-progress list first, then the accept queue and last the main call tree because that's the order in which a call progresses. Not that a call should move from the accept queue to the main tree whilst we're shutting down a socket, but it a call could possibly move from sequreq to acceptq whilst we're clearing up. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
Родитель
dabe5a7906
Коммит
f36b5e444c
|
@ -564,12 +564,6 @@ void rxrpc_release_calls_on_socket(struct rxrpc_sock *rx)
|
|||
|
||||
read_lock_bh(&rx->call_lock);
|
||||
|
||||
/* mark all the calls as no longer wanting incoming packets */
|
||||
for (p = rb_first(&rx->calls); p; p = rb_next(p)) {
|
||||
call = rb_entry(p, struct rxrpc_call, sock_node);
|
||||
rxrpc_mark_call_released(call);
|
||||
}
|
||||
|
||||
/* kill the not-yet-accepted incoming calls */
|
||||
list_for_each_entry(call, &rx->secureq, accept_link) {
|
||||
rxrpc_mark_call_released(call);
|
||||
|
@ -579,6 +573,12 @@ void rxrpc_release_calls_on_socket(struct rxrpc_sock *rx)
|
|||
rxrpc_mark_call_released(call);
|
||||
}
|
||||
|
||||
/* mark all the calls as no longer wanting incoming packets */
|
||||
for (p = rb_first(&rx->calls); p; p = rb_next(p)) {
|
||||
call = rb_entry(p, struct rxrpc_call, sock_node);
|
||||
rxrpc_mark_call_released(call);
|
||||
}
|
||||
|
||||
read_unlock_bh(&rx->call_lock);
|
||||
_leave("");
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче