Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 103526
b: refs/heads/master
c: 968edbe
h: refs/heads/master
v: v3
  • Loading branch information
Allan Stephens authored and David S. Miller committed Jul 15, 2008
1 parent 0264a43 commit c707e32
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 14 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1aad72d6cd518872c5f545320823bf7f4dafb026
refs/heads/master: 968edbe1c82f1a50d80225ed7e410aba419e55bf
43 changes: 30 additions & 13 deletions trunk/net/tipc/name_table.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* net/tipc/name_table.c: TIPC name table code
*
* Copyright (c) 2000-2006, Ericsson AB
* Copyright (c) 2004-2005, Wind River Systems
* Copyright (c) 2004-2008, Wind River Systems
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
Expand Down Expand Up @@ -52,9 +52,16 @@ static int tipc_nametbl_size = 1024; /* must be a power of 2 */
* struct sub_seq - container for all published instances of a name sequence
* @lower: name sequence lower bound
* @upper: name sequence upper bound
* @node_list: circular list of matching publications with >= node scope
* @cluster_list: circular list of matching publications with >= cluster scope
* @zone_list: circular list of matching publications with >= zone scope
* @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.)
*/

struct sub_seq {
Expand All @@ -63,6 +70,9 @@ struct sub_seq {
struct publication *node_list;
struct publication *cluster_list;
struct publication *zone_list;
u32 node_list_size;
u32 cluster_list_size;
u32 zone_list_size;
};

/**
Expand Down Expand Up @@ -317,6 +327,7 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq,
dbg("inserting publ %p, node=0x%x publ->node=0x%x, subscr->node=%p\n",
publ, node, publ->node, publ->subscr.node);

sseq->zone_list_size++;
if (!sseq->zone_list)
sseq->zone_list = publ->zone_list_next = publ;
else {
Expand All @@ -325,6 +336,7 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq,
}

if (in_own_cluster(node)) {
sseq->cluster_list_size++;
if (!sseq->cluster_list)
sseq->cluster_list = publ->cluster_list_next = publ;
else {
Expand All @@ -335,6 +347,7 @@ static struct publication *tipc_nameseq_insert_publ(struct name_seq *nseq,
}

if (node == tipc_own_addr) {
sseq->node_list_size++;
if (!sseq->node_list)
sseq->node_list = publ->node_list_next = publ;
else {
Expand Down Expand Up @@ -411,6 +424,7 @@ static struct publication *tipc_nameseq_remove_publ(struct name_seq *nseq, u32 i
} else {
sseq->zone_list = NULL;
}
sseq->zone_list_size--;

/* Remove publication from cluster scope list, if present */

Expand Down Expand Up @@ -439,6 +453,7 @@ static struct publication *tipc_nameseq_remove_publ(struct name_seq *nseq, u32 i
} else {
sseq->cluster_list = NULL;
}
sseq->cluster_list_size--;
}
end_cluster:

Expand Down Expand Up @@ -469,6 +484,7 @@ static struct publication *tipc_nameseq_remove_publ(struct name_seq *nseq, u32 i
} else {
sseq->node_list = NULL;
}
sseq->node_list_size--;
}
end_node:

Expand Down Expand Up @@ -709,17 +725,18 @@ int tipc_nametbl_mc_translate(u32 type, u32 lower, u32 upper, u32 limit,

if (sseq->lower > upper)
break;
publ = sseq->cluster_list;
if (publ)

publ = sseq->node_list;
if (publ) {
do {
if (publ->scope > limit)
/* ignore out-of-scope publication */ ;
else if (publ->node == tipc_own_addr)
if (publ->scope <= limit)
tipc_port_list_add(dports, publ->ref);
else
res = 1;
publ = publ->cluster_list_next;
} while (publ != sseq->cluster_list);
publ = publ->node_list_next;
} while (publ != sseq->node_list);
}

if (sseq->cluster_list_size != sseq->node_list_size)
res = 1;
}

spin_unlock_bh(&seq->lock);
Expand Down

0 comments on commit c707e32

Please sign in to comment.