git: 83b5c80c6923 - main - net: refactor if_clone.c #1
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
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);