This fixes missing VNET sets in the hpts system. Basically
without this and running vnets with a TCP stack that uses some of the features is a recipe for panic (without this commit). Reported by: Larry Rosenman Sponsored by: Netflix Inc. Differential Revision: https://reviews.freebsd.org/D15757
This commit is contained in:
parent
700e893c34
commit
c9b4ac7587
@ -1215,7 +1215,9 @@ tcp_input_data(struct tcp_hpts_entry *hpts, struct timeval *tv)
|
||||
hpts->p_inp = inp;
|
||||
drop_reason = inp->inp_hpts_drop_reas;
|
||||
inp->inp_in_input = 0;
|
||||
tp = intotcpcb(inp);
|
||||
mtx_unlock(&hpts->p_mtx);
|
||||
CURVNET_SET(tp->t_vnet);
|
||||
if (drop_reason) {
|
||||
INP_INFO_RLOCK(&V_tcbinfo);
|
||||
ti_locked = TI_RLOCKED;
|
||||
@ -1234,10 +1236,10 @@ tcp_input_data(struct tcp_hpts_entry *hpts, struct timeval *tv)
|
||||
INP_WUNLOCK(inp);
|
||||
}
|
||||
ti_locked = TI_UNLOCKED;
|
||||
CURVNET_RESTORE();
|
||||
mtx_lock(&hpts->p_mtx);
|
||||
continue;
|
||||
}
|
||||
tp = intotcpcb(inp);
|
||||
if ((tp == NULL) || (tp->t_inpcb == NULL)) {
|
||||
goto out;
|
||||
}
|
||||
@ -1262,6 +1264,7 @@ tcp_input_data(struct tcp_hpts_entry *hpts, struct timeval *tv)
|
||||
}
|
||||
if (in_pcbrele_wlocked(inp) == 0)
|
||||
INP_WUNLOCK(inp);
|
||||
CURVNET_RESTORE();
|
||||
mtx_lock(&hpts->p_mtx);
|
||||
continue;
|
||||
}
|
||||
@ -1282,7 +1285,6 @@ tcp_input_data(struct tcp_hpts_entry *hpts, struct timeval *tv)
|
||||
*/
|
||||
tcp_set_hpts(inp);
|
||||
}
|
||||
CURVNET_SET(tp->t_vnet);
|
||||
m = tp->t_in_pkt;
|
||||
n = NULL;
|
||||
if (m != NULL &&
|
||||
@ -1366,7 +1368,6 @@ tcp_input_data(struct tcp_hpts_entry *hpts, struct timeval *tv)
|
||||
if (m)
|
||||
n = m->m_nextpkt;
|
||||
}
|
||||
CURVNET_RESTORE();
|
||||
goto out;
|
||||
}
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user