diff options
Diffstat (limited to 'net/ipv6/mcast.c')
| -rw-r--r-- | net/ipv6/mcast.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 6e871afbb2c7..3b114e3fa2f8 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c | |||
| @@ -28,7 +28,6 @@ | |||
| 28 | * - MLDv2 support | 28 | * - MLDv2 support |
| 29 | */ | 29 | */ |
| 30 | 30 | ||
| 31 | #include <linux/config.h> | ||
| 32 | #include <linux/module.h> | 31 | #include <linux/module.h> |
| 33 | #include <linux/errno.h> | 32 | #include <linux/errno.h> |
| 34 | #include <linux/types.h> | 33 | #include <linux/types.h> |
| @@ -172,7 +171,7 @@ static int ip6_mc_leave_src(struct sock *sk, struct ipv6_mc_socklist *iml, | |||
| 172 | 171 | ||
| 173 | #define IPV6_MLD_MAX_MSF 64 | 172 | #define IPV6_MLD_MAX_MSF 64 |
| 174 | 173 | ||
| 175 | int sysctl_mld_max_msf = IPV6_MLD_MAX_MSF; | 174 | int sysctl_mld_max_msf __read_mostly = IPV6_MLD_MAX_MSF; |
| 176 | 175 | ||
| 177 | /* | 176 | /* |
| 178 | * socket join on multicast group | 177 | * socket join on multicast group |
| @@ -269,13 +268,14 @@ int ipv6_sock_mc_drop(struct sock *sk, int ifindex, struct in6_addr *addr) | |||
| 269 | if ((dev = dev_get_by_index(mc_lst->ifindex)) != NULL) { | 268 | if ((dev = dev_get_by_index(mc_lst->ifindex)) != NULL) { |
| 270 | struct inet6_dev *idev = in6_dev_get(dev); | 269 | struct inet6_dev *idev = in6_dev_get(dev); |
| 271 | 270 | ||
| 271 | (void) ip6_mc_leave_src(sk, mc_lst, idev); | ||
| 272 | if (idev) { | 272 | if (idev) { |
| 273 | (void) ip6_mc_leave_src(sk,mc_lst,idev); | ||
| 274 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); | 273 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); |
| 275 | in6_dev_put(idev); | 274 | in6_dev_put(idev); |
| 276 | } | 275 | } |
| 277 | dev_put(dev); | 276 | dev_put(dev); |
| 278 | } | 277 | } else |
| 278 | (void) ip6_mc_leave_src(sk, mc_lst, NULL); | ||
| 279 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); | 279 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); |
| 280 | return 0; | 280 | return 0; |
| 281 | } | 281 | } |
| @@ -335,13 +335,14 @@ void ipv6_sock_mc_close(struct sock *sk) | |||
| 335 | if (dev) { | 335 | if (dev) { |
| 336 | struct inet6_dev *idev = in6_dev_get(dev); | 336 | struct inet6_dev *idev = in6_dev_get(dev); |
| 337 | 337 | ||
| 338 | (void) ip6_mc_leave_src(sk, mc_lst, idev); | ||
| 338 | if (idev) { | 339 | if (idev) { |
| 339 | (void) ip6_mc_leave_src(sk, mc_lst, idev); | ||
| 340 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); | 340 | __ipv6_dev_mc_dec(idev, &mc_lst->addr); |
| 341 | in6_dev_put(idev); | 341 | in6_dev_put(idev); |
| 342 | } | 342 | } |
| 343 | dev_put(dev); | 343 | dev_put(dev); |
| 344 | } | 344 | } else |
| 345 | (void) ip6_mc_leave_src(sk, mc_lst, NULL); | ||
| 345 | 346 | ||
| 346 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); | 347 | sock_kfree_s(sk, mc_lst, sizeof(*mc_lst)); |
| 347 | 348 | ||
