.. | .. |
---|
94 | 94 | struct net *net = sock_net(skb->sk); |
---|
95 | 95 | struct netlink_diag_req *req; |
---|
96 | 96 | struct netlink_sock *nlsk; |
---|
| 97 | + unsigned long flags; |
---|
97 | 98 | struct sock *sk; |
---|
98 | 99 | int num = 2; |
---|
99 | 100 | int ret = 0; |
---|
.. | .. |
---|
152 | 153 | num++; |
---|
153 | 154 | |
---|
154 | 155 | mc_list: |
---|
155 | | - read_lock(&nl_table_lock); |
---|
| 156 | + read_lock_irqsave(&nl_table_lock, flags); |
---|
156 | 157 | sk_for_each_bound(sk, &tbl->mc_list) { |
---|
157 | 158 | if (sk_hashed(sk)) |
---|
158 | 159 | continue; |
---|
.. | .. |
---|
167 | 168 | NETLINK_CB(cb->skb).portid, |
---|
168 | 169 | cb->nlh->nlmsg_seq, |
---|
169 | 170 | NLM_F_MULTI, |
---|
170 | | - sock_i_ino(sk)) < 0) { |
---|
| 171 | + __sock_i_ino(sk)) < 0) { |
---|
171 | 172 | ret = 1; |
---|
172 | 173 | break; |
---|
173 | 174 | } |
---|
174 | 175 | num++; |
---|
175 | 176 | } |
---|
176 | | - read_unlock(&nl_table_lock); |
---|
| 177 | + read_unlock_irqrestore(&nl_table_lock, flags); |
---|
177 | 178 | |
---|
178 | 179 | done: |
---|
179 | 180 | cb->args[0] = num; |
---|