mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	mld: add mc_lock for protecting per-interface mld data
The purpose of this lock is to avoid a bottleneck in the query/report event handler logic. By previous patches, almost all mld data is protected by RTNL. So, the query and report event handler, which is data path logic acquires RTNL too. Therefore if a lot of query and report events are received, it uses RTNL for a long time. So it makes the control-plane bottleneck because of using RTNL. In order to avoid this bottleneck, mc_lock is added. mc_lock protect only per-interface mld data and per-interface mld data is used in the query/report event handler logic. So, no longer rtnl_lock is needed in the query/report event handler logic. Therefore bottleneck will be disappeared by mc_lock. Suggested-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: Taehee Yoo <ap420073@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									f185de28d9
								
							
						
					
					
						commit
						63ed8de4be
					
				
					 2 changed files with 194 additions and 116 deletions
				
			
		| 
						 | 
				
			
			@ -190,6 +190,7 @@ struct inet6_dev {
 | 
			
		|||
 | 
			
		||||
	spinlock_t		mc_query_lock;	/* mld query queue lock */
 | 
			
		||||
	spinlock_t		mc_report_lock;	/* mld query report lock */
 | 
			
		||||
	struct mutex		mc_lock;	/* mld global lock */
 | 
			
		||||
 | 
			
		||||
	struct ifacaddr6	*ac_list;
 | 
			
		||||
	rwlock_t		lock;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										309
									
								
								net/ipv6/mcast.c
									
									
									
									
									
								
							
							
						
						
									
										309
									
								
								net/ipv6/mcast.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
		Loading…
	
		Reference in a new issue