aboutsummaryrefslogtreecommitdiffstats
path: root/net/rxrpc/ar-internal.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--net/rxrpc/ar-internal.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
index 6583a8399c89..9fc89cdc6ae3 100644
--- a/net/rxrpc/ar-internal.h
+++ b/net/rxrpc/ar-internal.h
@@ -584,10 +584,17 @@ static inline void rxrpc_get_connection(struct rxrpc_connection *conn)
atomic_inc(&conn->usage);
}
+static inline
+struct rxrpc_connection *rxrpc_get_connection_maybe(struct rxrpc_connection *conn)
+{
+ return atomic_inc_not_zero(&conn->usage) ? conn : NULL;
+}
static inline void rxrpc_queue_conn(struct rxrpc_connection *conn)
{
- rxrpc_queue_work(&conn->processor);
+ if (rxrpc_get_connection_maybe(conn) &&
+ !rxrpc_queue_work(&conn->processor))
+ rxrpc_put_connection(conn);
}
/*