Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Yue Haibing and committed by
Paolo Abeni
a8594c95 06baf9bf

+23 -25
+23 -25
net/ipv6/mcast.c
··· 789 789 break; 790 790 pmc_prev = pmc; 791 791 } 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 - } 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 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); 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); 806 805 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); 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; 819 814 } 815 + in6_dev_put(pmc->idev); 816 + ip6_mc_clear_src(pmc); 817 + kfree_rcu(pmc, rcu); 820 818 } 821 819 822 820 static void mld_clear_delrec(struct inet6_dev *idev)