Commit 0043550b authored by Jon Paul Maloy's avatar Jon Paul Maloy Committed by David S. Miller

tipc: move broadcast link lock to struct tipc_net

The broadcast lock will need to be acquired outside bcast.c in a later
commit. For this reason, we move the lock to struct tipc_net. Consistent
with the changes in the previous commit, we also introducee two new
functions tipc_bcast_lock() and tipc_bcast_unlock(). The code that is
currently using tipc_bclink_lock()/unlock() will be phased out during
the coming commits in this series.
Signed-off-by: default avatarJon Maloy <jon.maloy@ericsson.com>
Reviewed-by: default avatarYing Xue <ying.xue@windriver.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6beb19a6
...@@ -90,7 +90,6 @@ struct tipc_bcbearer { ...@@ -90,7 +90,6 @@ struct tipc_bcbearer {
/** /**
* struct tipc_bc_base - link used for broadcast messages * struct tipc_bc_base - link used for broadcast messages
* @lock: spinlock governing access to structure
* @link: (non-standard) broadcast link structure * @link: (non-standard) broadcast link structure
* @node: (non-standard) node structure representing b'cast link's peer node * @node: (non-standard) node structure representing b'cast link's peer node
* @bcast_nodes: map of broadcast-capable nodes * @bcast_nodes: map of broadcast-capable nodes
...@@ -99,7 +98,6 @@ struct tipc_bcbearer { ...@@ -99,7 +98,6 @@ struct tipc_bcbearer {
* Handles sequence numbering, fragmentation, bundling, etc. * Handles sequence numbering, fragmentation, bundling, etc.
*/ */
struct tipc_bc_base { struct tipc_bc_base {
spinlock_t lock; /* spinlock protecting broadcast structs */
struct tipc_link link; struct tipc_link link;
struct tipc_node node; struct tipc_node node;
struct sk_buff_head arrvq; struct sk_buff_head arrvq;
...@@ -124,16 +122,12 @@ static void tipc_nmap_add(struct tipc_node_map *nm_ptr, u32 node); ...@@ -124,16 +122,12 @@ static void tipc_nmap_add(struct tipc_node_map *nm_ptr, u32 node);
static void tipc_nmap_remove(struct tipc_node_map *nm_ptr, u32 node); static void tipc_nmap_remove(struct tipc_node_map *nm_ptr, u32 node);
static void tipc_bclink_lock(struct net *net) static void tipc_bclink_lock(struct net *net)
{ {
struct tipc_net *tn = net_generic(net, tipc_net_id); tipc_bcast_lock(net);
spin_lock_bh(&tn->bcbase->lock);
} }
static void tipc_bclink_unlock(struct net *net) static void tipc_bclink_unlock(struct net *net)
{ {
struct tipc_net *tn = net_generic(net, tipc_net_id); tipc_bcast_unlock(net);
spin_unlock_bh(&tn->bcbase->lock);
} }
void tipc_bclink_input(struct net *net) void tipc_bclink_input(struct net *net)
...@@ -1031,7 +1025,7 @@ int tipc_bcast_init(struct net *net) ...@@ -1031,7 +1025,7 @@ int tipc_bcast_init(struct net *net)
bcbearer->media.send_msg = tipc_bcbearer_send; bcbearer->media.send_msg = tipc_bcbearer_send;
sprintf(bcbearer->media.name, "tipc-broadcast"); sprintf(bcbearer->media.name, "tipc-broadcast");
spin_lock_init(&bclink->lock); spin_lock_init(&tipc_net(net)->bclock);
__skb_queue_head_init(&bcl->transmq); __skb_queue_head_init(&bcl->transmq);
__skb_queue_head_init(&bcl->backlogq); __skb_queue_head_init(&bcl->backlogq);
__skb_queue_head_init(&bcl->deferdq); __skb_queue_head_init(&bcl->deferdq);
......
...@@ -69,4 +69,14 @@ int tipc_nl_bc_link_set(struct net *net, struct nlattr *attrs[]); ...@@ -69,4 +69,14 @@ int tipc_nl_bc_link_set(struct net *net, struct nlattr *attrs[]);
void tipc_bclink_input(struct net *net); void tipc_bclink_input(struct net *net);
void tipc_bclink_sync_state(struct tipc_node *n, struct tipc_msg *msg); void tipc_bclink_sync_state(struct tipc_node *n, struct tipc_msg *msg);
static inline void tipc_bcast_lock(struct net *net)
{
spin_lock_bh(&tipc_net(net)->bclock);
}
static inline void tipc_bcast_unlock(struct net *net)
{
spin_unlock_bh(&tipc_net(net)->bclock);
}
#endif #endif
...@@ -93,6 +93,7 @@ struct tipc_net { ...@@ -93,6 +93,7 @@ struct tipc_net {
struct tipc_bearer __rcu *bearer_list[MAX_BEARERS + 1]; struct tipc_bearer __rcu *bearer_list[MAX_BEARERS + 1];
/* Broadcast link */ /* Broadcast link */
spinlock_t bclock;
struct tipc_bcbearer *bcbearer; struct tipc_bcbearer *bcbearer;
struct tipc_bc_base *bcbase; struct tipc_bc_base *bcbase;
struct tipc_link *bcl; struct tipc_link *bcl;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment