forked from mirrors/linux
		
	net: add netns refcount tracker to struct sock
Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
		
							parent
							
								
									9ba74e6c9e
								
							
						
					
					
						commit
						ffa84b5ffb
					
				
					 2 changed files with 5 additions and 3 deletions
				
			
		|  | @ -350,6 +350,7 @@ struct bpf_local_storage; | ||||||
|   *	@sk_txtime_deadline_mode: set deadline mode for SO_TXTIME |   *	@sk_txtime_deadline_mode: set deadline mode for SO_TXTIME | ||||||
|   *	@sk_txtime_report_errors: set report errors mode for SO_TXTIME |   *	@sk_txtime_report_errors: set report errors mode for SO_TXTIME | ||||||
|   *	@sk_txtime_unused: unused txtime flags |   *	@sk_txtime_unused: unused txtime flags | ||||||
|  |   *	@ns_tracker: tracker for netns reference | ||||||
|   */ |   */ | ||||||
| struct sock { | struct sock { | ||||||
| 	/*
 | 	/*
 | ||||||
|  | @ -538,6 +539,7 @@ struct sock { | ||||||
| 	struct bpf_local_storage __rcu	*sk_bpf_storage; | 	struct bpf_local_storage __rcu	*sk_bpf_storage; | ||||||
| #endif | #endif | ||||||
| 	struct rcu_head		sk_rcu; | 	struct rcu_head		sk_rcu; | ||||||
|  | 	netns_tracker		ns_tracker; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| enum sk_pacing { | enum sk_pacing { | ||||||
|  |  | ||||||
|  | @ -1983,7 +1983,7 @@ struct sock *sk_alloc(struct net *net, int family, gfp_t priority, | ||||||
| 		sock_lock_init(sk); | 		sock_lock_init(sk); | ||||||
| 		sk->sk_net_refcnt = kern ? 0 : 1; | 		sk->sk_net_refcnt = kern ? 0 : 1; | ||||||
| 		if (likely(sk->sk_net_refcnt)) { | 		if (likely(sk->sk_net_refcnt)) { | ||||||
| 			get_net(net); | 			get_net_track(net, &sk->ns_tracker, priority); | ||||||
| 			sock_inuse_add(net, 1); | 			sock_inuse_add(net, 1); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -2039,7 +2039,7 @@ static void __sk_destruct(struct rcu_head *head) | ||||||
| 	put_pid(sk->sk_peer_pid); | 	put_pid(sk->sk_peer_pid); | ||||||
| 
 | 
 | ||||||
| 	if (likely(sk->sk_net_refcnt)) | 	if (likely(sk->sk_net_refcnt)) | ||||||
| 		put_net(sock_net(sk)); | 		put_net_track(sock_net(sk), &sk->ns_tracker); | ||||||
| 	sk_prot_free(sk->sk_prot_creator, sk); | 	sk_prot_free(sk->sk_prot_creator, sk); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -2126,7 +2126,7 @@ struct sock *sk_clone_lock(const struct sock *sk, const gfp_t priority) | ||||||
| 
 | 
 | ||||||
| 	/* SANITY */ | 	/* SANITY */ | ||||||
| 	if (likely(newsk->sk_net_refcnt)) { | 	if (likely(newsk->sk_net_refcnt)) { | ||||||
| 		get_net(sock_net(newsk)); | 		get_net_track(sock_net(newsk), &newsk->ns_tracker, priority); | ||||||
| 		sock_inuse_add(sock_net(newsk), 1); | 		sock_inuse_add(sock_net(newsk), 1); | ||||||
| 	} | 	} | ||||||
| 	sk_node_init(&newsk->sk_node); | 	sk_node_init(&newsk->sk_node); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Eric Dumazet
						Eric Dumazet