On 03/13/2018 09:24 PM, Jon Maloy wrote: > As a further consequence of the previous commits, we can also remove > the member 'zone_list 'in struct name_info and struct publication. > Instead, we now let the member cluster_list take over the role a > container of all publications of a given <type,lower, upper>. > We also remove the counters for the size of those lists, since > they don't serve any purpose. > > Signed-off-by: Jon Maloy <[email protected]>
Acked-by: Ying Xue <[email protected]> > --- > net/tipc/name_table.c | 101 > ++++++++++++++------------------------------------ > net/tipc/name_table.h | 5 +-- > 2 files changed, 30 insertions(+), 76 deletions(-) > > diff --git a/net/tipc/name_table.c b/net/tipc/name_table.c > index 1a3a327..6d7b4c7 100644 > --- a/net/tipc/name_table.c > +++ b/net/tipc/name_table.c > @@ -50,24 +50,12 @@ > > /** > * struct name_info - name sequence publication info > - * @node_list: circular list of publications made by own node > - * @cluster_list: circular list of publications made by own cluster > - * @zone_list: circular list of publications made by own zone > - * @node_list_size: number of entries in "node_list" > - * @cluster_list_size: number of entries in "cluster_list" > - * @zone_list_size: number of entries in "zone_list" > - * > - * Note: The zone list always contains at least one entry, since all > - * publications of the associated name sequence belong to it. > - * (The cluster and node lists may be empty.) > + * @node_list: list of publications on own node of this <type,lower,upper> > + * @cluster_list: list of all publications of this <type,lower,upper> > */ > struct name_info { > struct list_head node_list; > struct list_head cluster_list; > - struct list_head zone_list; > - u32 node_list_size; > - u32 cluster_list_size; > - u32 zone_list_size; > }; > > /** > @@ -249,7 +237,7 @@ static struct publication > *tipc_nameseq_insert_publ(struct net *net, > info = sseq->info; > > /* Check if an identical publication already exists */ > - list_for_each_entry(publ, &info->zone_list, zone_list) { > + list_for_each_entry(publ, &info->cluster_list, cluster_list) { > if ((publ->ref == port) && (publ->key == key) && > (!publ->node || (publ->node == node))) > return NULL; > @@ -292,7 +280,6 @@ static struct publication > *tipc_nameseq_insert_publ(struct net *net, > > INIT_LIST_HEAD(&info->node_list); > INIT_LIST_HEAD(&info->cluster_list); > - INIT_LIST_HEAD(&info->zone_list); > > /* Insert new sub-sequence */ > sseq = &nseq->sseqs[inspos]; > @@ -311,18 +298,10 @@ static struct publication > *tipc_nameseq_insert_publ(struct net *net, > if (!publ) > return NULL; > > - list_add(&publ->zone_list, &info->zone_list); > - info->zone_list_size++; > - > - if (in_own_cluster(net, node)) { > - list_add(&publ->cluster_list, &info->cluster_list); > - info->cluster_list_size++; > - } > + list_add(&publ->cluster_list, &info->cluster_list); > > - if (in_own_node(net, node)) { > + if (in_own_node(net, node)) > list_add(&publ->node_list, &info->node_list); > - info->node_list_size++; > - } > > /* Any subscriptions waiting for notification? */ > list_for_each_entry_safe(s, st, &nseq->subscriptions, nameseq_list) { > @@ -363,7 +342,7 @@ static struct publication > *tipc_nameseq_remove_publ(struct net *net, > info = sseq->info; > > /* Locate publication, if it exists */ > - list_for_each_entry(publ, &info->zone_list, zone_list) { > + list_for_each_entry(publ, &info->cluster_list, cluster_list) { > if ((publ->key == key) && (publ->ref == ref) && > (!publ->node || (publ->node == node))) > goto found; > @@ -371,24 +350,12 @@ static struct publication > *tipc_nameseq_remove_publ(struct net *net, > return NULL; > > found: > - /* Remove publication from zone scope list */ > - list_del(&publ->zone_list); > - info->zone_list_size--; > - > - /* Remove publication from cluster scope list, if present */ > - if (in_own_cluster(net, node)) { > - list_del(&publ->cluster_list); > - info->cluster_list_size--; > - } > - > - /* Remove publication from node scope list, if present */ > - if (in_own_node(net, node)) { > + list_del(&publ->cluster_list); > + if (in_own_node(net, node)) > list_del(&publ->node_list); > - info->node_list_size--; > - } > > /* Contract subseq list if no more publications for that subseq */ > - if (list_empty(&info->zone_list)) { > + if (list_empty(&info->cluster_list)) { > kfree(info); > free = &nseq->sseqs[nseq->first_free--]; > memmove(sseq, sseq + 1, (free - (sseq + 1)) * sizeof(*sseq)); > @@ -435,7 +402,8 @@ static void tipc_nameseq_subscribe(struct name_seq *nseq, > struct name_info *info = sseq->info; > int must_report = 1; > > - list_for_each_entry(crs, &info->zone_list, zone_list) { > + list_for_each_entry(crs, &info->cluster_list, > + cluster_list) { > tipc_sub_report_overlap(sub, sseq->lower, > sseq->upper, > TIPC_PUBLISHED, > @@ -559,18 +527,12 @@ u32 tipc_nametbl_translate(struct net *net, u32 type, > u32 instance, > node_list); > list_move_tail(&publ->node_list, > &info->node_list); > - } else if (!list_empty(&info->cluster_list)) { > + } else { > publ = list_first_entry(&info->cluster_list, > struct publication, > cluster_list); > list_move_tail(&publ->cluster_list, > &info->cluster_list); > - } else { > - publ = list_first_entry(&info->zone_list, > - struct publication, > - zone_list); > - list_move_tail(&publ->zone_list, > - &info->zone_list); > } > } > > @@ -581,16 +543,10 @@ u32 tipc_nametbl_translate(struct net *net, u32 type, > u32 instance, > publ = list_first_entry(&info->node_list, struct publication, > node_list); > list_move_tail(&publ->node_list, &info->node_list); > - } else if (in_own_cluster_exact(net, *destnode)) { > - if (list_empty(&info->cluster_list)) > - goto no_match; > + } else { > publ = list_first_entry(&info->cluster_list, struct publication, > cluster_list); > list_move_tail(&publ->cluster_list, &info->cluster_list); > - } else { > - publ = list_first_entry(&info->zone_list, struct publication, > - zone_list); > - list_move_tail(&publ->zone_list, &info->zone_list); > } > > ref = publ->ref; > @@ -622,7 +578,7 @@ bool tipc_nametbl_lookup(struct net *net, u32 type, u32 > instance, u32 scope, > sseq = nameseq_find_subseq(seq, instance); > if (likely(sseq)) { > info = sseq->info; > - list_for_each_entry(publ, &info->zone_list, zone_list) { > + list_for_each_entry(publ, &info->cluster_list, cluster_list) { > if (publ->scope != scope) > continue; > if (publ->ref == exclude && publ->node == self) > @@ -631,7 +587,8 @@ bool tipc_nametbl_lookup(struct net *net, u32 type, u32 > instance, u32 scope, > (*dstcnt)++; > if (all) > continue; > - list_move_tail(&publ->zone_list, &info->zone_list); > + list_move_tail(&publ->cluster_list, > + &info->cluster_list); > break; > } > } > @@ -641,15 +598,14 @@ bool tipc_nametbl_lookup(struct net *net, u32 type, u32 > instance, u32 scope, > return !list_empty(dsts); > } > > -int tipc_nametbl_mc_lookup(struct net *net, u32 type, u32 lower, u32 upper, > - u32 scope, bool exact, struct list_head *dports) > +void tipc_nametbl_mc_lookup(struct net *net, u32 type, u32 lower, u32 upper, > + u32 scope, bool exact, struct list_head *dports) > { > struct sub_seq *sseq_stop; > struct name_info *info; > struct publication *p; > struct name_seq *seq; > struct sub_seq *sseq; > - int res = 0; > > rcu_read_lock(); > seq = nametbl_find_seq(net, type); > @@ -667,14 +623,10 @@ int tipc_nametbl_mc_lookup(struct net *net, u32 type, > u32 lower, u32 upper, > if (p->scope == scope || (!exact && p->scope < scope)) > tipc_dest_push(dports, 0, p->ref); > } > - > - if (info->cluster_list_size != info->node_list_size) > - res = 1; > } > spin_unlock_bh(&seq->lock); > exit: > rcu_read_unlock(); > - return res; > } > > /* tipc_nametbl_lookup_dst_nodes - find broadcast destination nodes > @@ -699,7 +651,7 @@ void tipc_nametbl_lookup_dst_nodes(struct net *net, u32 > type, u32 lower, > stop = seq->sseqs + seq->first_free; > for (; sseq != stop && sseq->lower <= upper; sseq++) { > info = sseq->info; > - list_for_each_entry(publ, &info->zone_list, zone_list) { > + list_for_each_entry(publ, &info->cluster_list, cluster_list) { > tipc_nlist_add(nodes, publ->node); > } > } > @@ -728,7 +680,7 @@ void tipc_nametbl_build_group(struct net *net, struct > tipc_group *grp, > stop = seq->sseqs + seq->first_free; > for (; sseq != stop; sseq++) { > info = sseq->info; > - list_for_each_entry(p, &info->zone_list, zone_list) { > + list_for_each_entry(p, &info->cluster_list, cluster_list) { > if (p->scope != scope) > continue; > tipc_group_add_member(grp, p->node, p->ref, p->lower); > @@ -899,7 +851,8 @@ static void tipc_purge_publications(struct net *net, > struct name_seq *seq) > spin_lock_bh(&seq->lock); > sseq = seq->sseqs; > info = sseq->info; > - list_for_each_entry_safe(publ, safe, &info->zone_list, zone_list) { > + list_for_each_entry_safe(publ, safe, &info->cluster_list, > + cluster_list) { > tipc_nameseq_remove_publ(net, seq, publ->lower, publ->node, > publ->ref, publ->key); > kfree_rcu(publ, rcu); > @@ -948,17 +901,19 @@ static int __tipc_nl_add_nametable_publ(struct > tipc_nl_msg *msg, > struct publication *p; > > if (*last_publ) { > - list_for_each_entry(p, &sseq->info->zone_list, zone_list) > + list_for_each_entry(p, &sseq->info->cluster_list, > + cluster_list) > if (p->key == *last_publ) > break; > if (p->key != *last_publ) > return -EPIPE; > } else { > - p = list_first_entry(&sseq->info->zone_list, struct publication, > - zone_list); > + p = list_first_entry(&sseq->info->cluster_list, > + struct publication, > + cluster_list); > } > > - list_for_each_entry_from(p, &sseq->info->zone_list, zone_list) { > + list_for_each_entry_from(p, &sseq->info->cluster_list, cluster_list) { > *last_publ = p->key; > > hdr = genlmsg_put(msg->skb, msg->portid, msg->seq, > diff --git a/net/tipc/name_table.h b/net/tipc/name_table.h > index 47f72cd..a9063e2 100644 > --- a/net/tipc/name_table.h > +++ b/net/tipc/name_table.h > @@ -81,7 +81,6 @@ struct publication { > struct list_head pport_list; > struct list_head node_list; > struct list_head cluster_list; > - struct list_head zone_list; > struct rcu_head rcu; > }; > > @@ -102,8 +101,8 @@ struct name_table { > int tipc_nl_name_table_dump(struct sk_buff *skb, struct netlink_callback > *cb); > > u32 tipc_nametbl_translate(struct net *net, u32 type, u32 instance, u32 > *node); > -int tipc_nametbl_mc_lookup(struct net *net, u32 type, u32 lower, u32 upper, > - u32 scope, bool exact, struct list_head *dports); > +void tipc_nametbl_mc_lookup(struct net *net, u32 type, u32 lower, u32 upper, > + u32 scope, bool exact, struct list_head *dports); > void tipc_nametbl_build_group(struct net *net, struct tipc_group *grp, > u32 type, u32 domain); > void tipc_nametbl_lookup_dst_nodes(struct net *net, u32 type, u32 lower, > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ tipc-discussion mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/tipc-discussion
