summaryrefslogtreecommitdiffstats
path: root/net/rxrpc/conn_client.c
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2016-09-17 11:49:12 +0200
committerDavid Howells <dhowells@redhat.com>2016-09-17 11:53:21 +0200
commit78883793f8ac4bb3f97d48db7a8c71d8476bcf98 (patch)
tree9091d900cbaf711cadaa8f7ed40b560f9af9a9d8 /net/rxrpc/conn_client.c
parentrxrpc: Call rxrpc_release_call() on error in rxrpc_new_client_call() (diff)
downloadlinux-78883793f8ac4bb3f97d48db7a8c71d8476bcf98.tar.xz
linux-78883793f8ac4bb3f97d48db7a8c71d8476bcf98.zip
rxrpc: Fix unexposed client conn release
If the last call on a client connection is release after the connection has had a bunch of calls allocated but before any DATA packets are sent (so that it's not yet marked RXRPC_CONN_EXPOSED), an assertion will happen in rxrpc_disconnect_client_call(). af_rxrpc: Assertion failed - 1(0x1) >= 2(0x2) is false ------------[ cut here ]------------ kernel BUG at ../net/rxrpc/conn_client.c:753! This is because it's expecting the conn to have been exposed and to have 2 or more refs - but this isn't necessarily the case. Simply remove the assertion. This allows the conn to be moved into the inactive state and deleted if it isn't resurrected before the final put is called. Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc/conn_client.c')
-rw-r--r--net/rxrpc/conn_client.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/net/rxrpc/conn_client.c b/net/rxrpc/conn_client.c
index 5a675c43cace..226bc910e556 100644
--- a/net/rxrpc/conn_client.c
+++ b/net/rxrpc/conn_client.c
@@ -721,7 +721,6 @@ void rxrpc_disconnect_client_call(struct rxrpc_call *call)
}
ASSERTCMP(rcu_access_pointer(chan->call), ==, call);
- ASSERTCMP(atomic_read(&conn->usage), >=, 2);
/* If a client call was exposed to the world, we save the result for
* retransmission.