|
@@ -40,11 +40,6 @@
|
|
|
|
|
|
int sysctl_tipc_named_timeout __read_mostly = 2000;
|
|
int sysctl_tipc_named_timeout __read_mostly = 2000;
|
|
|
|
|
|
-/**
|
|
|
|
- * struct tipc_dist_queue - queue holding deferred name table updates
|
|
|
|
- */
|
|
|
|
-static struct list_head tipc_dist_queue = LIST_HEAD_INIT(tipc_dist_queue);
|
|
|
|
-
|
|
|
|
struct distr_queue_item {
|
|
struct distr_queue_item {
|
|
struct distr_item i;
|
|
struct distr_item i;
|
|
u32 dtype;
|
|
u32 dtype;
|
|
@@ -279,9 +274,11 @@ static bool tipc_update_nametbl(struct net *net, struct distr_item *i,
|
|
* tipc_named_add_backlog - add a failed name table update to the backlog
|
|
* tipc_named_add_backlog - add a failed name table update to the backlog
|
|
*
|
|
*
|
|
*/
|
|
*/
|
|
-static void tipc_named_add_backlog(struct distr_item *i, u32 type, u32 node)
|
|
|
|
|
|
+static void tipc_named_add_backlog(struct net *net, struct distr_item *i,
|
|
|
|
+ u32 type, u32 node)
|
|
{
|
|
{
|
|
struct distr_queue_item *e;
|
|
struct distr_queue_item *e;
|
|
|
|
+ struct tipc_net *tn = net_generic(net, tipc_net_id);
|
|
unsigned long now = get_jiffies_64();
|
|
unsigned long now = get_jiffies_64();
|
|
|
|
|
|
e = kzalloc(sizeof(*e), GFP_ATOMIC);
|
|
e = kzalloc(sizeof(*e), GFP_ATOMIC);
|
|
@@ -291,7 +288,7 @@ static void tipc_named_add_backlog(struct distr_item *i, u32 type, u32 node)
|
|
e->node = node;
|
|
e->node = node;
|
|
e->expires = now + msecs_to_jiffies(sysctl_tipc_named_timeout);
|
|
e->expires = now + msecs_to_jiffies(sysctl_tipc_named_timeout);
|
|
memcpy(e, i, sizeof(*i));
|
|
memcpy(e, i, sizeof(*i));
|
|
- list_add_tail(&e->next, &tipc_dist_queue);
|
|
|
|
|
|
+ list_add_tail(&e->next, &tn->dist_queue);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -301,10 +298,11 @@ static void tipc_named_add_backlog(struct distr_item *i, u32 type, u32 node)
|
|
void tipc_named_process_backlog(struct net *net)
|
|
void tipc_named_process_backlog(struct net *net)
|
|
{
|
|
{
|
|
struct distr_queue_item *e, *tmp;
|
|
struct distr_queue_item *e, *tmp;
|
|
|
|
+ struct tipc_net *tn = net_generic(net, tipc_net_id);
|
|
char addr[16];
|
|
char addr[16];
|
|
unsigned long now = get_jiffies_64();
|
|
unsigned long now = get_jiffies_64();
|
|
|
|
|
|
- list_for_each_entry_safe(e, tmp, &tipc_dist_queue, next) {
|
|
|
|
|
|
+ list_for_each_entry_safe(e, tmp, &tn->dist_queue, next) {
|
|
if (time_after(e->expires, now)) {
|
|
if (time_after(e->expires, now)) {
|
|
if (!tipc_update_nametbl(net, &e->i, e->node, e->dtype))
|
|
if (!tipc_update_nametbl(net, &e->i, e->node, e->dtype))
|
|
continue;
|
|
continue;
|
|
@@ -344,7 +342,7 @@ void tipc_named_rcv(struct net *net, struct sk_buff_head *inputq)
|
|
node = msg_orignode(msg);
|
|
node = msg_orignode(msg);
|
|
while (count--) {
|
|
while (count--) {
|
|
if (!tipc_update_nametbl(net, item, node, mtype))
|
|
if (!tipc_update_nametbl(net, item, node, mtype))
|
|
- tipc_named_add_backlog(item, mtype, node);
|
|
|
|
|
|
+ tipc_named_add_backlog(net, item, mtype, node);
|
|
item++;
|
|
item++;
|
|
}
|
|
}
|
|
kfree_skb(skb);
|
|
kfree_skb(skb);
|