Skip to content

Commit

Permalink
ifnet: Make if_detach_internal() and if_vmove() void
Browse files Browse the repository at this point in the history
if_detach_internal() never fail since change [1]. As a consequence,
also does its caller if_vmove(). While here, remove a stall comment.

No functional change intended.

This reverts commit c7bab2a.

[1] a779388 if: Protect V_ifnet in vnet_if_return()

Reviewed by:	glebius
MFC after:	3 days
Differential Revision:	https://reviews.freebsd.org/D48820

(cherry picked from commit bb0348a17974d83671becbd32ea0e4bd2ea61906)
  • Loading branch information
gmshake authored and fichtner committed Feb 18, 2025
1 parent b62f195 commit 3de3dba
Showing 1 changed file with 16 additions and 27 deletions.
43 changes: 16 additions & 27 deletions sys/net/if.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,12 +287,12 @@ static int if_getgroup(struct ifgroupreq *, struct ifnet *);
static int if_getgroupmembers(struct ifgroupreq *);
static void if_delgroups(struct ifnet *);
static void if_attach_internal(struct ifnet *, bool);
static int if_detach_internal(struct ifnet *, bool);
static void if_detach_internal(struct ifnet *, bool);
static void if_siocaddmulti(void *, int);
static void if_link_ifnet(struct ifnet *);
static bool if_unlink_ifnet(struct ifnet *, bool);
#ifdef VIMAGE
static int if_vmove(struct ifnet *, struct vnet *);
static void if_vmove(struct ifnet *, struct vnet *);
#endif

#ifdef INET6
Expand Down Expand Up @@ -1117,7 +1117,7 @@ if_detach(struct ifnet *ifp)
* on a vnet instance shutdown without this flag being set, e.g., when
* the cloned interfaces are destoyed as first thing of teardown.
*/
static int
static void
if_detach_internal(struct ifnet *ifp, bool vmove)
{
struct ifaddr *ifa;
Expand Down Expand Up @@ -1248,36 +1248,29 @@ if_detach_internal(struct ifnet *ifp, bool vmove)
ifp->if_afdata_initialized = 0;
IF_AFDATA_UNLOCK(ifp);
if (i == 0)
return (0);
return;
SLIST_FOREACH(dp, &domains, dom_next) {
if (dp->dom_ifdetach && ifp->if_afdata[dp->dom_family]) {
(*dp->dom_ifdetach)(ifp,
ifp->if_afdata[dp->dom_family]);
ifp->if_afdata[dp->dom_family] = NULL;
}
}

return (0);
}

#ifdef VIMAGE
/*
* if_vmove() performs a limited version of if_detach() in current
* vnet and if_attach()es the ifnet to the vnet specified as 2nd arg.
*/
static int
static void
if_vmove(struct ifnet *ifp, struct vnet *new_vnet)
{
int rc;

/*
* Detach from current vnet, but preserve LLADDR info, do not
* mark as dead etc. so that the ifnet can be reattached later.
* If we cannot find it, we lost the race to someone else.
*/
rc = if_detach_internal(ifp, true);
if (rc != 0)
return (rc);
if_detach_internal(ifp, true);

/*
* Perform interface-specific reassignment tasks, if provided by
Expand All @@ -1292,7 +1285,6 @@ if_vmove(struct ifnet *ifp, struct vnet *new_vnet)
CURVNET_SET_QUIET(new_vnet);
if_attach_internal(ifp, true);
CURVNET_RESTORE();
return (0);
}

/*
Expand All @@ -1303,8 +1295,7 @@ if_vmove_loan(struct thread *td, struct ifnet *ifp, char *ifname, int jid)
{
struct prison *pr;
struct ifnet *difp;
int error;
bool found __diagused;
bool found;
bool shutdown;

MPASS(ifindex_table[ifp->if_index].ife_ifnet == ifp);
Expand Down Expand Up @@ -1351,16 +1342,15 @@ if_vmove_loan(struct thread *td, struct ifnet *ifp, char *ifname, int jid)
}

/* Move the interface into the child jail/vnet. */
error = if_vmove(ifp, pr->pr_vnet);
if_vmove(ifp, pr->pr_vnet);

/* Report the new if_xname back to the userland on success. */
if (error == 0)
sprintf(ifname, "%s", ifp->if_xname);
/* Report the new if_xname back to the userland. */
sprintf(ifname, "%s", ifp->if_xname);

sx_xunlock(&ifnet_detach_sxlock);

prison_free(pr);
return (error);
return (0);
}

static int
Expand All @@ -1369,7 +1359,7 @@ if_vmove_reclaim(struct thread *td, char *ifname, int jid)
struct prison *pr;
struct vnet *vnet_dst;
struct ifnet *ifp;
int error, found __diagused;
int found __diagused;
bool shutdown;

/* Try to find the prison within our visibility. */
Expand Down Expand Up @@ -1410,16 +1400,15 @@ if_vmove_reclaim(struct thread *td, char *ifname, int jid)
found = if_unlink_ifnet(ifp, true);
MPASS(found);
sx_xlock(&ifnet_detach_sxlock);
error = if_vmove(ifp, vnet_dst);
if_vmove(ifp, vnet_dst);
sx_xunlock(&ifnet_detach_sxlock);
CURVNET_RESTORE();

/* Report the new if_xname back to the userland on success. */
if (error == 0)
sprintf(ifname, "%s", ifp->if_xname);
/* Report the new if_xname back to the userland. */
sprintf(ifname, "%s", ifp->if_xname);

prison_free(pr);
return (error);
return (0);
}
#endif /* VIMAGE */

Expand Down

0 comments on commit 3de3dba

Please sign in to comment.