|
@@ -664,6 +664,7 @@ struct publication *tipc_nametbl_publish(u32 type, u32 lower, u32 upper,
|
|
|
u32 scope, u32 port_ref, u32 key)
|
|
|
{
|
|
|
struct publication *publ;
|
|
|
+ struct sk_buff *buf = NULL;
|
|
|
|
|
|
if (table.local_publ_count >= TIPC_MAX_PUBLICATIONS) {
|
|
|
pr_warn("Publication failed, local publication limit reached (%u)\n",
|
|
@@ -676,9 +677,12 @@ struct publication *tipc_nametbl_publish(u32 type, u32 lower, u32 upper,
|
|
|
tipc_own_addr, port_ref, key);
|
|
|
if (likely(publ)) {
|
|
|
table.local_publ_count++;
|
|
|
- tipc_named_publish(publ);
|
|
|
+ buf = tipc_named_publish(publ);
|
|
|
}
|
|
|
write_unlock_bh(&tipc_nametbl_lock);
|
|
|
+
|
|
|
+ if (buf)
|
|
|
+ named_cluster_distribute(buf);
|
|
|
return publ;
|
|
|
}
|
|
|
|
|
@@ -688,15 +692,19 @@ struct publication *tipc_nametbl_publish(u32 type, u32 lower, u32 upper,
|
|
|
int tipc_nametbl_withdraw(u32 type, u32 lower, u32 ref, u32 key)
|
|
|
{
|
|
|
struct publication *publ;
|
|
|
+ struct sk_buff *buf;
|
|
|
|
|
|
write_lock_bh(&tipc_nametbl_lock);
|
|
|
publ = tipc_nametbl_remove_publ(type, lower, tipc_own_addr, ref, key);
|
|
|
if (likely(publ)) {
|
|
|
table.local_publ_count--;
|
|
|
- tipc_named_withdraw(publ);
|
|
|
+ buf = tipc_named_withdraw(publ);
|
|
|
write_unlock_bh(&tipc_nametbl_lock);
|
|
|
list_del_init(&publ->pport_list);
|
|
|
kfree(publ);
|
|
|
+
|
|
|
+ if (buf)
|
|
|
+ named_cluster_distribute(buf);
|
|
|
return 1;
|
|
|
}
|
|
|
write_unlock_bh(&tipc_nametbl_lock);
|