forked from mirrors/linux
		
	[AF_UNIX]: Make unix_tot_inflight counter non-atomic
This counter is _always_ modified under the unix_gc_lock spinlock, so its atomicity can be provided w/o additional efforts. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									8032b46489
								
							
						
					
					
						commit
						9305cfa444
					
				
					 3 changed files with 5 additions and 5 deletions
				
			
		| 
						 | 
					@ -12,7 +12,7 @@ extern void unix_gc(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define UNIX_HASH_SIZE	256
 | 
					#define UNIX_HASH_SIZE	256
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern atomic_t unix_tot_inflight;
 | 
					extern unsigned int unix_tot_inflight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct unix_address {
 | 
					struct unix_address {
 | 
				
			||||||
	atomic_t	refcnt;
 | 
						atomic_t	refcnt;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -457,7 +457,7 @@ static int unix_release_sock (struct sock *sk, int embrion)
 | 
				
			||||||
	 *	  What the above comment does talk about? --ANK(980817)
 | 
						 *	  What the above comment does talk about? --ANK(980817)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (atomic_read(&unix_tot_inflight))
 | 
						if (unix_tot_inflight)
 | 
				
			||||||
		unix_gc();		/* Garbage collect fds */
 | 
							unix_gc();		/* Garbage collect fds */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,7 +92,7 @@ static LIST_HEAD(gc_inflight_list);
 | 
				
			||||||
static LIST_HEAD(gc_candidates);
 | 
					static LIST_HEAD(gc_candidates);
 | 
				
			||||||
static DEFINE_SPINLOCK(unix_gc_lock);
 | 
					static DEFINE_SPINLOCK(unix_gc_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
atomic_t unix_tot_inflight = ATOMIC_INIT(0);
 | 
					unsigned int unix_tot_inflight;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct sock *unix_get_socket(struct file *filp)
 | 
					static struct sock *unix_get_socket(struct file *filp)
 | 
				
			||||||
| 
						 | 
					@ -133,7 +133,7 @@ void unix_inflight(struct file *fp)
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			BUG_ON(list_empty(&u->link));
 | 
								BUG_ON(list_empty(&u->link));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		atomic_inc(&unix_tot_inflight);
 | 
							unix_tot_inflight++;
 | 
				
			||||||
		spin_unlock(&unix_gc_lock);
 | 
							spin_unlock(&unix_gc_lock);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -147,7 +147,7 @@ void unix_notinflight(struct file *fp)
 | 
				
			||||||
		BUG_ON(list_empty(&u->link));
 | 
							BUG_ON(list_empty(&u->link));
 | 
				
			||||||
		if (atomic_dec_and_test(&u->inflight))
 | 
							if (atomic_dec_and_test(&u->inflight))
 | 
				
			||||||
			list_del_init(&u->link);
 | 
								list_del_init(&u->link);
 | 
				
			||||||
		atomic_dec(&unix_tot_inflight);
 | 
							unix_tot_inflight--;
 | 
				
			||||||
		spin_unlock(&unix_gc_lock);
 | 
							spin_unlock(&unix_gc_lock);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue