aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
authorAllan Stephens <allan.stephens@windriver.com>2011-11-07 17:00:54 -0500
committerPaul Gortmaker <paul.gortmaker@windriver.com>2012-02-24 17:05:17 -0500
commitbc9f8143ecf96c17a56635d2ef4c3c6b6ec27947 (patch)
tree7fad37cb7c78e88cba4b59aba374194cead93f56 /net/tipc
parent75aba9af2410ae8fc70600d9dcda0651f20e091e (diff)
tipc: Revert name table translation optimization
Restores name table translation using a non-zero domain that is "out of scope", which was broken by an earlier commit (5d9c54c1e9ececcf7e99c4f014f9bec7ee3a7def). Comments have now been added to the name table translation routine to make it clear that there are actually three possible outcomes to a translation request (found/not found/deferred), rather than just two (found/not found). Note that a straightforward revert of the earlier commit is not possible, as other changes to the name table translation logic have occurred since the incorrect optimization was made. Signed-off-by: Allan Stephens <allan.stephens@windriver.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Diffstat (limited to 'net/tipc')
-rw-r--r--net/tipc/name_table.c17
-rw-r--r--net/tipc/port.c2
2 files changed, 14 insertions, 5 deletions
diff --git a/net/tipc/name_table.c b/net/tipc/name_table.c
index c2224f98e64f..c6a1ae36952e 100644
--- a/net/tipc/name_table.c
+++ b/net/tipc/name_table.c
@@ -539,10 +539,17 @@ struct publication *tipc_nametbl_remove_publ(u32 type, u32 lower,
539} 539}
540 540
541/* 541/*
542 * tipc_nametbl_translate - translate name to port id 542 * tipc_nametbl_translate - perform name translation
543 * 543 *
544 * Note: on entry 'destnode' is the search domain used during translation; 544 * On entry, 'destnode' is the search domain used during translation.
545 * on exit it passes back the node address of the matching port (if any) 545 *
546 * On exit:
547 * - if name translation is deferred to another node/cluster/zone,
548 * leaves 'destnode' unchanged (will be non-zero) and returns 0
549 * - if name translation is attempted and succeeds, sets 'destnode'
550 * to publishing node and returns port reference (will be non-zero)
551 * - if name translation is attempted and fails, sets 'destnode' to 0
552 * and returns 0
546 */ 553 */
547 554
548u32 tipc_nametbl_translate(u32 type, u32 instance, u32 *destnode) 555u32 tipc_nametbl_translate(u32 type, u32 instance, u32 *destnode)
@@ -552,6 +559,7 @@ u32 tipc_nametbl_translate(u32 type, u32 instance, u32 *destnode)
552 struct publication *publ; 559 struct publication *publ;
553 struct name_seq *seq; 560 struct name_seq *seq;
554 u32 ref = 0; 561 u32 ref = 0;
562 u32 node = 0;
555 563
556 if (!tipc_in_scope(*destnode, tipc_own_addr)) 564 if (!tipc_in_scope(*destnode, tipc_own_addr))
557 return 0; 565 return 0;
@@ -609,11 +617,12 @@ u32 tipc_nametbl_translate(u32 type, u32 instance, u32 *destnode)
609 } 617 }
610 618
611 ref = publ->ref; 619 ref = publ->ref;
612 *destnode = publ->node; 620 node = publ->node;
613no_match: 621no_match:
614 spin_unlock_bh(&seq->lock); 622 spin_unlock_bh(&seq->lock);
615not_found: 623not_found:
616 read_unlock_bh(&tipc_nametbl_lock); 624 read_unlock_bh(&tipc_nametbl_lock);
625 *destnode = node;
617 return ref; 626 return ref;
618} 627}
619 628
diff --git a/net/tipc/port.c b/net/tipc/port.c
index c4b5a347037a..b103d7630c82 100644
--- a/net/tipc/port.c
+++ b/net/tipc/port.c
@@ -1221,7 +1221,7 @@ int tipc_send2name(u32 ref, struct tipc_name const *name, unsigned int domain,
1221 msg_set_destnode(msg, destnode); 1221 msg_set_destnode(msg, destnode);
1222 msg_set_destport(msg, destport); 1222 msg_set_destport(msg, destport);
1223 1223
1224 if (likely(destport)) { 1224 if (likely(destport || destnode)) {
1225 if (likely(destnode == tipc_own_addr)) 1225 if (likely(destnode == tipc_own_addr))
1226 res = tipc_port_recv_sections(p_ptr, num_sect, 1226 res = tipc_port_recv_sections(p_ptr, num_sect,
1227 msg_sect, total_len); 1227 msg_sect, total_len);