diff options
author | Jon Paul Maloy <jon.maloy@ericsson.com> | 2014-08-23 00:09:14 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-08-23 20:18:34 +0200 |
commit | 5a9ee0be3371eb77d671a77e26261931c5c3fb31 (patch) | |
tree | 6127a9c68edea30b97209bc6eedee1ce5b641c17 /net/tipc/ref.h | |
parent | tipc: eliminate functions tipc_port_init and tipc_port_destroy (diff) | |
download | linux-5a9ee0be3371eb77d671a77e26261931c5c3fb31.tar.xz linux-5a9ee0be3371eb77d671a77e26261931c5c3fb31.zip |
tipc: use registry when scanning sockets
The functions tipc_port_get_ports() and tipc_port_reinit() scan over
all sockets/ports to access each of them. This is done by using a
dedicated linked list, 'tipc_socks' where all sockets are members. The
list is in turn protected by a spinlock, 'port_list_lock', while each
socket is locked by using port_lock at the moment of access.
In order to reduce complexity and risk of deadlock, we want to get
rid of the linked list and the accompanying spinlock.
This is what we do in this commit. Instead of the linked list, we use
the port registry to scan across the sockets. We also add usage of
bh_lock_sock() inside the scope of port_lock in both functions, as a
preparation for the complete removal of port_lock.
Finally, we move the functions from port.c to socket.c, and rename them
to tipc_sk_sock_show() and tipc_sk_reinit() repectively.
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Reviewed-by: Erik Hugne <erik.hugne@ericsson.com>
Reviewed-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/ref.h')
-rw-r--r-- | net/tipc/ref.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/tipc/ref.h b/net/tipc/ref.h index d01aa1df63b8..e236fa520a1d 100644 --- a/net/tipc/ref.h +++ b/net/tipc/ref.h @@ -44,5 +44,6 @@ u32 tipc_ref_acquire(void *object, spinlock_t **lock); void tipc_ref_discard(u32 ref); void *tipc_ref_lock(u32 ref); +void *tipc_ref_lock_next(u32 *ref); #endif |