Skip to content

Commit a8594c9

Browse files
Yue HaibingPaolo Abeni
authored andcommitted
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 <[email protected]> Reviewed-by: Kuniyuki Iwashima <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
1 parent 06baf9b commit a8594c9

File tree

1 file changed

+25
-27
lines changed

1 file changed

+25
-27
lines changed

net/ipv6/mcast.c

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -789,34 +789,32 @@ static void mld_del_delrec(struct inet6_dev *idev, struct ifmcaddr6 *im)
789789
break;
790790
pmc_prev = pmc;
791791
}
792-
if (pmc) {
793-
if (pmc_prev)
794-
rcu_assign_pointer(pmc_prev->next, pmc->next);
795-
else
796-
rcu_assign_pointer(idev->mc_tomb, pmc->next);
797-
}
798-
799-
if (pmc) {
800-
im->idev = pmc->idev;
801-
if (im->mca_sfmode == MCAST_INCLUDE) {
802-
tomb = rcu_replace_pointer(im->mca_tomb,
803-
mc_dereference(pmc->mca_tomb, pmc->idev),
804-
lockdep_is_held(&im->idev->mc_lock));
805-
rcu_assign_pointer(pmc->mca_tomb, tomb);
806-
807-
sources = rcu_replace_pointer(im->mca_sources,
808-
mc_dereference(pmc->mca_sources, pmc->idev),
809-
lockdep_is_held(&im->idev->mc_lock));
810-
rcu_assign_pointer(pmc->mca_sources, sources);
811-
for_each_psf_mclock(im, psf)
812-
psf->sf_crcount = idev->mc_qrv;
813-
} else {
814-
im->mca_crcount = idev->mc_qrv;
815-
}
816-
in6_dev_put(pmc->idev);
817-
ip6_mc_clear_src(pmc);
818-
kfree_rcu(pmc, rcu);
792+
if (!pmc)
793+
return;
794+
if (pmc_prev)
795+
rcu_assign_pointer(pmc_prev->next, pmc->next);
796+
else
797+
rcu_assign_pointer(idev->mc_tomb, pmc->next);
798+
799+
im->idev = pmc->idev;
800+
if (im->mca_sfmode == MCAST_INCLUDE) {
801+
tomb = rcu_replace_pointer(im->mca_tomb,
802+
mc_dereference(pmc->mca_tomb, pmc->idev),
803+
lockdep_is_held(&im->idev->mc_lock));
804+
rcu_assign_pointer(pmc->mca_tomb, tomb);
805+
806+
sources = rcu_replace_pointer(im->mca_sources,
807+
mc_dereference(pmc->mca_sources, pmc->idev),
808+
lockdep_is_held(&im->idev->mc_lock));
809+
rcu_assign_pointer(pmc->mca_sources, sources);
810+
for_each_psf_mclock(im, psf)
811+
psf->sf_crcount = idev->mc_qrv;
812+
} else {
813+
im->mca_crcount = idev->mc_qrv;
819814
}
815+
in6_dev_put(pmc->idev);
816+
ip6_mc_clear_src(pmc);
817+
kfree_rcu(pmc, rcu);
820818
}
821819

822820
static void mld_clear_delrec(struct inet6_dev *idev)

0 commit comments

Comments
 (0)