mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	tipc: replace name table service range array with rb tree
The current design of the binding table has an unnecessary memory consuming and complex data structure. It aggregates the service range items into an array, which is expanded by a factor two every time it becomes too small to hold a new item. Furthermore, the arrays never shrink when the number of ranges diminishes. We now replace this array with an RB tree that is holding the range items as tree nodes, each range directly holding a list of bindings. This, along with a few name changes, improves both readability and volume of the code, as well as reducing memory consumption and hopefully improving cache hit rate. Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									24197ee210
								
							
						
					
					
						commit
						218527fe27
					
				
					 6 changed files with 469 additions and 560 deletions
				
			
		| 
						 | 
				
			
			@ -58,6 +58,7 @@
 | 
			
		|||
#include <linux/etherdevice.h>
 | 
			
		||||
#include <net/netns/generic.h>
 | 
			
		||||
#include <linux/rhashtable.h>
 | 
			
		||||
#include <net/genetlink.h>
 | 
			
		||||
 | 
			
		||||
struct tipc_node;
 | 
			
		||||
struct tipc_bearer;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1810,7 +1810,7 @@ int tipc_link_bc_nack_rcv(struct tipc_link *l, struct sk_buff *skb,
 | 
			
		|||
 | 
			
		||||
void tipc_link_set_queue_limits(struct tipc_link *l, u32 win)
 | 
			
		||||
{
 | 
			
		||||
	int max_bulk = TIPC_MAX_PUBLICATIONS / (l->mtu / ITEM_SIZE);
 | 
			
		||||
	int max_bulk = TIPC_MAX_PUBL / (l->mtu / ITEM_SIZE);
 | 
			
		||||
 | 
			
		||||
	l->window = win;
 | 
			
		||||
	l->backlog[TIPC_LOW_IMPORTANCE].limit      = max_t(u16, 50, win);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -97,7 +97,7 @@ struct publication {
 | 
			
		|||
 * @local_publ_count: number of publications issued by this node
 | 
			
		||||
 */
 | 
			
		||||
struct name_table {
 | 
			
		||||
	struct hlist_head seq_hlist[TIPC_NAMETBL_SIZE];
 | 
			
		||||
	struct hlist_head services[TIPC_NAMETBL_SIZE];
 | 
			
		||||
	struct list_head node_scope;
 | 
			
		||||
	struct list_head cluster_scope;
 | 
			
		||||
	u32 local_publ_count;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -324,12 +324,12 @@ static void tipc_node_write_unlock(struct tipc_node *n)
 | 
			
		|||
	if (flags & TIPC_NOTIFY_LINK_UP) {
 | 
			
		||||
		tipc_mon_peer_up(net, addr, bearer_id);
 | 
			
		||||
		tipc_nametbl_publish(net, TIPC_LINK_STATE, addr, addr,
 | 
			
		||||
				     TIPC_NODE_SCOPE, link_id, addr);
 | 
			
		||||
				     TIPC_NODE_SCOPE, link_id, link_id);
 | 
			
		||||
	}
 | 
			
		||||
	if (flags & TIPC_NOTIFY_LINK_DOWN) {
 | 
			
		||||
		tipc_mon_peer_down(net, addr, bearer_id);
 | 
			
		||||
		tipc_nametbl_withdraw(net, TIPC_LINK_STATE, addr,
 | 
			
		||||
				      link_id, addr);
 | 
			
		||||
				      link_id, link_id);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,7 +40,7 @@
 | 
			
		|||
#include "topsrv.h"
 | 
			
		||||
 | 
			
		||||
#define TIPC_MAX_SUBSCR         65535
 | 
			
		||||
#define TIPC_MAX_PUBLICATIONS   65535
 | 
			
		||||
#define TIPC_MAX_PUBL           65535
 | 
			
		||||
 | 
			
		||||
struct tipc_subscription;
 | 
			
		||||
struct tipc_conn;
 | 
			
		||||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ struct tipc_subscription {
 | 
			
		|||
	struct kref kref;
 | 
			
		||||
	struct net *net;
 | 
			
		||||
	struct timer_list timer;
 | 
			
		||||
	struct list_head nameseq_list;
 | 
			
		||||
	struct list_head service_list;
 | 
			
		||||
	struct list_head sub_list;
 | 
			
		||||
	struct tipc_event evt;
 | 
			
		||||
	int conid;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue