diff options
Diffstat (limited to 'net/core/sysctl_net_core.c')
| -rw-r--r-- | net/core/sysctl_net_core.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c index 77a65f03148..d05559d4d9c 100644 --- a/net/core/sysctl_net_core.c +++ b/net/core/sysctl_net_core.c @@ -68,8 +68,13 @@ static int rps_sock_flow_sysctl(ctl_table *table, int write,  		if (sock_table != orig_sock_table) {  			rcu_assign_pointer(rps_sock_flow_table, sock_table); -			synchronize_rcu(); -			vfree(orig_sock_table); +			if (sock_table) +				jump_label_inc(&rps_needed); +			if (orig_sock_table) { +				jump_label_dec(&rps_needed); +				synchronize_rcu(); +				vfree(orig_sock_table); +			}  		}  	}  |