ipv6: mcast: Avoid a duplicate pointer check in mld_del_delrec()

Avoid duplicate non-null pointer check for pmc in mld_del_delrec().
No functional changes.

Signed-off-by: Yue Haibing <yuehaibing@huawei.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20250714081949.3109947-1-yuehaibing@huawei.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Yue Haibing 2025-07-14 16:19:49 +08:00 committed by Paolo Abeni
parent 06baf9bfa6
commit a8594c956c

View file

@ -789,34 +789,32 @@ static void mld_del_delrec(struct inet6_dev *idev, struct ifmcaddr6 *im)
break; break;
pmc_prev = pmc; pmc_prev = pmc;
} }
if (pmc) { if (!pmc)
if (pmc_prev) return;
rcu_assign_pointer(pmc_prev->next, pmc->next); if (pmc_prev)
else rcu_assign_pointer(pmc_prev->next, pmc->next);
rcu_assign_pointer(idev->mc_tomb, pmc->next); else
} rcu_assign_pointer(idev->mc_tomb, pmc->next);
if (pmc) { im->idev = pmc->idev;
im->idev = pmc->idev; if (im->mca_sfmode == MCAST_INCLUDE) {
if (im->mca_sfmode == MCAST_INCLUDE) { tomb = rcu_replace_pointer(im->mca_tomb,
tomb = rcu_replace_pointer(im->mca_tomb, mc_dereference(pmc->mca_tomb, pmc->idev),
mc_dereference(pmc->mca_tomb, pmc->idev), lockdep_is_held(&im->idev->mc_lock));
lockdep_is_held(&im->idev->mc_lock)); rcu_assign_pointer(pmc->mca_tomb, tomb);
rcu_assign_pointer(pmc->mca_tomb, tomb);
sources = rcu_replace_pointer(im->mca_sources, sources = rcu_replace_pointer(im->mca_sources,
mc_dereference(pmc->mca_sources, pmc->idev), mc_dereference(pmc->mca_sources, pmc->idev),
lockdep_is_held(&im->idev->mc_lock)); lockdep_is_held(&im->idev->mc_lock));
rcu_assign_pointer(pmc->mca_sources, sources); rcu_assign_pointer(pmc->mca_sources, sources);
for_each_psf_mclock(im, psf) for_each_psf_mclock(im, psf)
psf->sf_crcount = idev->mc_qrv; psf->sf_crcount = idev->mc_qrv;
} else { } else {
im->mca_crcount = idev->mc_qrv; im->mca_crcount = idev->mc_qrv;
}
in6_dev_put(pmc->idev);
ip6_mc_clear_src(pmc);
kfree_rcu(pmc, rcu);
} }
in6_dev_put(pmc->idev);
ip6_mc_clear_src(pmc);
kfree_rcu(pmc, rcu);
} }
static void mld_clear_delrec(struct inet6_dev *idev) static void mld_clear_delrec(struct inet6_dev *idev)