diff options
Diffstat (limited to 'net/netlink/diag.c')
| -rw-r--r-- | net/netlink/diag.c | 7 | 
1 files changed, 4 insertions, 3 deletions
diff --git a/net/netlink/diag.c b/net/netlink/diag.c index c6255eac305c..e4f21b1067bc 100644 --- a/net/netlink/diag.c +++ b/net/netlink/diag.c @@ -94,6 +94,7 @@ static int __netlink_diag_dump(struct sk_buff *skb, struct netlink_callback *cb,  	struct net *net = sock_net(skb->sk);  	struct netlink_diag_req *req;  	struct netlink_sock *nlsk; +	unsigned long flags;  	struct sock *sk;  	int num = 2;  	int ret = 0; @@ -152,7 +153,7 @@ static int __netlink_diag_dump(struct sk_buff *skb, struct netlink_callback *cb,  	num++;  mc_list: -	read_lock(&nl_table_lock); +	read_lock_irqsave(&nl_table_lock, flags);  	sk_for_each_bound(sk, &tbl->mc_list) {  		if (sk_hashed(sk))  			continue; @@ -167,13 +168,13 @@ mc_list:  				 NETLINK_CB(cb->skb).portid,  				 cb->nlh->nlmsg_seq,  				 NLM_F_MULTI, -				 sock_i_ino(sk)) < 0) { +				 __sock_i_ino(sk)) < 0) {  			ret = 1;  			break;  		}  		num++;  	} -	read_unlock(&nl_table_lock); +	read_unlock_irqrestore(&nl_table_lock, flags);  done:  	cb->args[0] = num;  |