git: 83b5c80c6923 - main - net: refactor if_clone.c #1

From: Alexander V. Chernikov <melifaro_at_FreeBSD.org>
Date: Wed, 15 Mar 2023 13:55:58 UTC
The branch main has been updated by melifaro:

URL: https://cgit.FreeBSD.org/src/commit/?id=83b5c80c69232da4254250fcd94b2d377356acd7

commit 83b5c80c69232da4254250fcd94b2d377356acd7
Author:     Alexander V. Chernikov <melifaro@FreeBSD.org>
AuthorDate: 2023-03-13 10:41:58 +0000
Commit:     Alexander V. Chernikov <melifaro@FreeBSD.org>
CommitDate: 2023-03-15 13:54:22 +0000

    net: refactor if_clone.c #1
    
    * Add ifc_find_cloner()
    * Rename current ifc_find_cloner() to ifc_find_cloner_in_vnet()
    * Add ifc_find_cloner_match()
    
    This change simplifies the code a bit and reduces the diff to
     the netlink interface cloners merge (D39032).
    
    Reviewed by:    glebius, kp
    Differential Revision: https://reviews.freebsd.org/D39046
    MFC after:      2 weeks
---
 sys/net/if_clone.c | 39 +++++++++++++++++++++++++++++----------
 1 file changed, 29 insertions(+), 10 deletions(-)

diff --git a/sys/net/if_clone.c b/sys/net/if_clone.c
index 7dcb3c271e42..59d60645cb89 100644
--- a/sys/net/if_clone.c
+++ b/sys/net/if_clone.c
@@ -109,6 +109,8 @@ static int	if_clone_createif(struct if_clone *ifc, char *name, size_t len,
 
 static int ifc_simple_match(struct if_clone *ifc, const char *name);
 static int ifc_handle_unit(struct if_clone *ifc, char *name, size_t len, int *punit);
+static struct if_clone *ifc_find_cloner(const char *name);
+static struct if_clone *ifc_find_cloner_match(const char *name);
 
 #ifdef CLONE_COMPAT_13
 static int ifc_simple_create_wrapper(struct if_clone *ifc, char *name, size_t maxlen,
@@ -195,13 +197,7 @@ ifc_create_ifp(const char *name, struct ifc_data *ifd,
 	int error;
 
 	/* Try to find an applicable cloner for this request */
-	IF_CLONERS_LOCK();
-	LIST_FOREACH(ifc, &V_if_cloners, ifc_list) {
-		if (ifc->ifc_match(ifc, name))
-			break;
-	}
-	IF_CLONERS_UNLOCK();
-
+	ifc = ifc_find_cloner_match(name);
 	if (ifc == NULL)
 		return (EINVAL);
 
@@ -266,11 +262,25 @@ ifc_unlink_ifp(struct if_clone *ifc, struct ifnet *ifp)
 }
 
 static struct if_clone *
-ifc_find_cloner(const char *name, struct vnet *vnet)
+ifc_find_cloner_match(const char *name)
+{
+	struct if_clone *ifc;
+
+	IF_CLONERS_LOCK();
+	LIST_FOREACH(ifc, &V_if_cloners, ifc_list) {
+		if (ifc->ifc_match(ifc, name))
+			break;
+	}
+	IF_CLONERS_UNLOCK();
+
+	return (ifc);
+}
+
+static struct if_clone *
+ifc_find_cloner(const char *name)
 {
 	struct if_clone *ifc;
 
-	CURVNET_SET_QUIET(vnet);
 	IF_CLONERS_LOCK();
 	LIST_FOREACH(ifc, &V_if_cloners, ifc_list) {
 		if (strcmp(ifc->ifc_name, name) == 0) {
@@ -278,6 +288,15 @@ ifc_find_cloner(const char *name, struct vnet *vnet)
 		}
 	}
 	IF_CLONERS_UNLOCK();
+
+	return (ifc);
+}
+
+static struct if_clone *
+ifc_find_cloner_in_vnet(const char *name, struct vnet *vnet)
+{
+	CURVNET_SET_QUIET(vnet);
+	struct if_clone *ifc = ifc_find_cloner(name);
 	CURVNET_RESTORE();
 
 	return (ifc);
@@ -326,7 +345,7 @@ if_clone_destroy(const char *name)
 	if (ifp == NULL)
 		return (ENXIO);
 
-	ifc = ifc_find_cloner(ifp->if_dname, ifp->if_home_vnet);
+	ifc = ifc_find_cloner_in_vnet(ifp->if_dname, ifp->if_home_vnet);
 	if (ifc == NULL) {
 		if_rele(ifp);
 		return (EINVAL);