aboutsummaryrefslogtreecommitdiffstats
path: root/net/rxrpc/ar-internal.h
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2016-06-27 10:32:02 +0100
committerDavid Howells <dhowells@redhat.com>2016-07-06 10:43:05 +0100
commit5acbee4648789ba1fe9e7942280fb1966c76bd6f (patch)
tree029fea2e7e0bad391ef9abe52b6e436b51a99b02 /net/rxrpc/ar-internal.h
parentrxrpc: Avoid using stack memory in SG lists in rxkad (diff)
downloadlinux-dev-5acbee4648789ba1fe9e7942280fb1966c76bd6f.tar.xz
linux-dev-5acbee4648789ba1fe9e7942280fb1966c76bd6f.zip
rxrpc: Provide queuing helper functions
Provide queueing helper functions so that the queueing of local and connection objects can be fixed later. The issue is that a ref on the object needs to be passed to the work queue, but the act of queueing the object may fail because the object is already queued. Testing the queuedness of an object before hand doesn't work because there can be a race with someone else trying to queue it. What will have to be done is to adjust the refcount depending on the result of the queue operation. Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc/ar-internal.h')
-rw-r--r--net/rxrpc/ar-internal.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
index 796368d1fb25..45aef3ef7609 100644
--- a/net/rxrpc/ar-internal.h
+++ b/net/rxrpc/ar-internal.h
@@ -35,7 +35,6 @@ struct rxrpc_crypt {
queue_delayed_work(rxrpc_workqueue, (WS), (D))
#define rxrpc_queue_call(CALL) rxrpc_queue_work(&(CALL)->processor)
-#define rxrpc_queue_conn(CONN) rxrpc_queue_work(&(CONN)->processor)
struct rxrpc_connection;
@@ -566,6 +565,12 @@ static inline void rxrpc_get_connection(struct rxrpc_connection *conn)
atomic_inc(&conn->usage);
}
+
+static inline void rxrpc_queue_conn(struct rxrpc_connection *conn)
+{
+ rxrpc_queue_work(&conn->processor);
+}
+
/*
* input.c
*/
@@ -618,6 +623,11 @@ static inline void rxrpc_put_local(struct rxrpc_local *local)
__rxrpc_put_local(local);
}
+static inline void rxrpc_queue_local(struct rxrpc_local *local)
+{
+ rxrpc_queue_work(&local->processor);
+}
+
/*
* misc.c
*/