]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ipv6: mcast: Avoid a duplicate pointer check in mld_del_delrec()
authorYue Haibing <yuehaibing@huawei.com>
Mon, 14 Jul 2025 08:19:49 +0000 (16:19 +0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 15 Jul 2025 09:02:53 +0000 (11:02 +0200)
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>
net/ipv6/mcast.c

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