aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/node.h
diff options
context:
space:
mode:
authorJon Paul Maloy <jon.maloy@ericsson.com>2014-06-25 21:41:33 -0400
committerDavid S. Miller <davem@davemloft.net>2014-06-27 15:50:55 -0400
commit16e166b88cdfd508b88934ec0c8a0ec97e6b30f8 (patch)
tree0a816f77b87f4e0f56426fe4d849c64a10c92adc /net/tipc/node.h
parent4f1688b2c63cd86f0d7bcf95a9b3040e38bd3c1a (diff)
tipc: make link mtu easily accessible from socket
Message fragmentation is currently performed at link level, inside the protection of node_lock. This potentially binds up the sending link structure for a long time, instead of letting it do other tasks, such as handle reception of new packets. In this commit, we make the MTUs of each active link become easily accessible from the socket level, i.e., without taking any spinlock or dereferencing the target link pointer. This way, we make it possible to perform fragmentation in the sending socket, before sending the whole fragment chain to the link for transport. Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Reviewed-by: Erik Hugne <erik.hugne@ericsson.com> Reviewed-by: Ying Xue <ying.xue@windriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/node.h')
-rw-r--r--net/tipc/node.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/net/tipc/node.h b/net/tipc/node.h
index 9087063793f2..b61716a8218e 100644
--- a/net/tipc/node.h
+++ b/net/tipc/node.h
@@ -41,6 +41,7 @@
41#include "addr.h" 41#include "addr.h"
42#include "net.h" 42#include "net.h"
43#include "bearer.h" 43#include "bearer.h"
44#include "msg.h"
44 45
45/* 46/*
46 * Out-of-range value for node signature 47 * Out-of-range value for node signature
@@ -105,6 +106,7 @@ struct tipc_node {
105 spinlock_t lock; 106 spinlock_t lock;
106 struct hlist_node hash; 107 struct hlist_node hash;
107 struct tipc_link *active_links[2]; 108 struct tipc_link *active_links[2];
109 u32 act_mtus[2];
108 struct tipc_link *links[MAX_BEARERS]; 110 struct tipc_link *links[MAX_BEARERS];
109 unsigned int action_flags; 111 unsigned int action_flags;
110 struct tipc_node_bclink bclink; 112 struct tipc_node_bclink bclink;
@@ -143,4 +145,19 @@ static inline bool tipc_node_blocked(struct tipc_node *node)
143 TIPC_NOTIFY_NODE_DOWN | TIPC_WAIT_OWN_LINKS_DOWN)); 145 TIPC_NOTIFY_NODE_DOWN | TIPC_WAIT_OWN_LINKS_DOWN));
144} 146}
145 147
148static inline uint tipc_node_get_mtu(u32 addr, u32 selector)
149{
150 struct tipc_node *node;
151 u32 mtu;
152
153 node = tipc_node_find(addr);
154
155 if (likely(node))
156 mtu = node->act_mtus[selector & 1];
157 else
158 mtu = MAX_MSG_SIZE;
159
160 return mtu;
161}
162
146#endif 163#endif