|
|
@@ -791,14 +791,15 @@ static void mld_del_delrec(struct inet6_dev *idev, struct ifmcaddr6 *im)
|
|
|
if (pmc) {
|
|
|
im->idev = pmc->idev;
|
|
|
if (im->mca_sfmode == MCAST_INCLUDE) {
|
|
|
- im->mca_tomb = pmc->mca_tomb;
|
|
|
- im->mca_sources = pmc->mca_sources;
|
|
|
+ swap(im->mca_tomb, pmc->mca_tomb);
|
|
|
+ swap(im->mca_sources, pmc->mca_sources);
|
|
|
for (psf = im->mca_sources; psf; psf = psf->sf_next)
|
|
|
psf->sf_crcount = idev->mc_qrv;
|
|
|
} else {
|
|
|
im->mca_crcount = idev->mc_qrv;
|
|
|
}
|
|
|
in6_dev_put(pmc->idev);
|
|
|
+ ip6_mc_clear_src(pmc);
|
|
|
kfree(pmc);
|
|
|
}
|
|
|
spin_unlock_bh(&im->mca_lock);
|