diff options
Diffstat (limited to 'net/rxrpc/ar-connection.c')
| -rw-r--r-- | net/rxrpc/ar-connection.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/net/rxrpc/ar-connection.c b/net/rxrpc/ar-connection.c index 4106ca95ec8..6631f4f1e39 100644 --- a/net/rxrpc/ar-connection.c +++ b/net/rxrpc/ar-connection.c @@ -18,11 +18,15 @@  #include <net/af_rxrpc.h>  #include "ar-internal.h" +/* + * Time till a connection expires after last use (in seconds). + */ +unsigned rxrpc_connection_expiry = 10 * 60; +  static void rxrpc_connection_reaper(struct work_struct *work);  LIST_HEAD(rxrpc_connections);  DEFINE_RWLOCK(rxrpc_connection_lock); -static unsigned long rxrpc_connection_timeout = 10 * 60;  static DECLARE_DELAYED_WORK(rxrpc_connection_reap, rxrpc_connection_reaper);  /* @@ -381,6 +385,8 @@ static int rxrpc_connect_exclusive(struct rxrpc_sock *rx,  		rxrpc_assign_connection_id(conn);  		rx->conn = conn; +	} else { +		spin_lock(&trans->client_lock);  	}  	/* we've got a connection with a free channel and we can now attach the @@ -860,7 +866,7 @@ static void rxrpc_connection_reaper(struct work_struct *work)  		spin_lock(&conn->trans->client_lock);  		write_lock(&conn->trans->conn_lock); -		reap_time = conn->put_time + rxrpc_connection_timeout; +		reap_time = conn->put_time + rxrpc_connection_expiry;  		if (atomic_read(&conn->usage) > 0) {  			; @@ -914,7 +920,7 @@ void __exit rxrpc_destroy_all_connections(void)  {  	_enter(""); -	rxrpc_connection_timeout = 0; +	rxrpc_connection_expiry = 0;  	cancel_delayed_work(&rxrpc_connection_reap);  	rxrpc_queue_delayed_work(&rxrpc_connection_reap, 0);  | 
