rxrpc: Set connection expiry on idle, not put
Set the connection expiry time when a connection becomes idle rather than doing this in rxrpc_put_connection(). This makes the put path more efficient (it is likely to be called occasionally whilst a connection has outstanding calls because active workqueue items needs to be given a ref). The time is also preset in the connection allocator in case the connection never gets used. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -313,7 +313,7 @@ struct rxrpc_connection {
|
||||
struct rxrpc_crypt csum_iv; /* packet checksum base */
|
||||
unsigned long flags;
|
||||
unsigned long events;
|
||||
unsigned long put_time; /* Time at which last put */
|
||||
unsigned long idle_timestamp; /* Time at which last became idle */
|
||||
spinlock_t state_lock; /* state-change lock */
|
||||
atomic_t usage;
|
||||
enum rxrpc_conn_proto_state state : 8; /* current state of connection */
|
||||
@@ -565,7 +565,7 @@ struct rxrpc_connection *rxrpc_find_connection_rcu(struct rxrpc_local *,
|
||||
struct sk_buff *);
|
||||
void __rxrpc_disconnect_call(struct rxrpc_call *);
|
||||
void rxrpc_disconnect_call(struct rxrpc_call *);
|
||||
void rxrpc_put_connection(struct rxrpc_connection *);
|
||||
void __rxrpc_put_connection(struct rxrpc_connection *);
|
||||
void __exit rxrpc_destroy_all_connections(void);
|
||||
|
||||
static inline bool rxrpc_conn_is_client(const struct rxrpc_connection *conn)
|
||||
@@ -589,6 +589,13 @@ struct rxrpc_connection *rxrpc_get_connection_maybe(struct rxrpc_connection *con
|
||||
return atomic_inc_not_zero(&conn->usage) ? conn : NULL;
|
||||
}
|
||||
|
||||
static inline void rxrpc_put_connection(struct rxrpc_connection *conn)
|
||||
{
|
||||
if (conn && atomic_dec_return(&conn->usage) == 1)
|
||||
__rxrpc_put_connection(conn);
|
||||
}
|
||||
|
||||
|
||||
static inline bool rxrpc_queue_conn(struct rxrpc_connection *conn)
|
||||
{
|
||||
if (!rxrpc_get_connection_maybe(conn))
|
||||
|
Reference in New Issue
Block a user