mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 23:27:04 +02:00
MINOR: muxes/applet: Simplify checks on options to disable zero-copy forwarding
Global options to disable for zero-copy forwarding are now tested outside callbacks responsible to perform the forwarding itself. It is cleaner this way because we don't try at all zero-copy forwarding if at least one side does not support it. It is equivalent to what was performed before, but it is simplier this way.
This commit is contained in:
parent
ddf6b7539c
commit
081022a0c5
@ -1829,7 +1829,7 @@ static void http_cache_io_handler(struct appctx *appctx)
|
||||
if (find_http_meth(istptr(meth), istlen(meth)) == HTTP_METH_HEAD || ctx->send_notmodified)
|
||||
appctx->st0 = HTX_CACHE_EOM;
|
||||
else {
|
||||
if (!(global.tune.no_zero_copy_fwd & (NO_ZERO_COPY_FWD|NO_ZERO_COPY_FWD_APPLET)))
|
||||
if (!(global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_APPLET))
|
||||
se_fl_set(appctx->sedesc, SE_FL_MAY_FASTFWD_PROD);
|
||||
|
||||
appctx->to_forward = cache_ptr->body_size;
|
||||
|
@ -1968,7 +1968,8 @@ static size_t h1_process_demux(struct h1c *h1c, struct buffer *buf, size_t count
|
||||
/* Here h1s_sc(h1s) is always defined */
|
||||
if (!(h1c->flags & H1C_F_CANT_FASTFWD) &&
|
||||
(!(h1m->flags & H1_MF_RESP) || !(h1s->flags & H1S_F_BODYLESS_RESP)) &&
|
||||
(h1m->state == H1_MSG_DATA || h1m->state == H1_MSG_TUNNEL)) {
|
||||
(h1m->state == H1_MSG_DATA || h1m->state == H1_MSG_TUNNEL) &&
|
||||
!(global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_H1_RCV)) {
|
||||
TRACE_STATE("notify the mux can use fast-forward", H1_EV_RX_DATA|H1_EV_RX_BODY, h1c->conn, h1s);
|
||||
se_fl_set(h1s->sd, SE_FL_MAY_FASTFWD_PROD);
|
||||
}
|
||||
@ -4674,11 +4675,6 @@ static int h1_fastfwd(struct stconn *sc, unsigned int count, unsigned int flags)
|
||||
|
||||
TRACE_ENTER(H1_EV_STRM_RECV, h1c->conn, h1s, 0, (size_t[]){count});
|
||||
|
||||
if (global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_H1_RCV) {
|
||||
h1c->flags = (h1c->flags & ~H1C_F_WANT_FASTFWD) | H1C_F_CANT_FASTFWD;
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (h1m->state != H1_MSG_DATA && h1m->state != H1_MSG_TUNNEL) {
|
||||
h1c->flags &= ~H1C_F_WANT_FASTFWD;
|
||||
TRACE_STATE("Cannot fast-forwad data now !(msg_data|msg_tunnel)", H1_EV_STRM_RECV, h1c->conn, h1s);
|
||||
|
@ -7131,11 +7131,6 @@ static size_t h2_nego_ff(struct stconn *sc, struct buffer *input, size_t count,
|
||||
|
||||
TRACE_ENTER(H2_EV_H2S_SEND|H2_EV_STRM_SEND, h2s->h2c->conn, h2s);
|
||||
|
||||
if (global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_H2_SND) {
|
||||
h2s->sd->iobuf.flags |= IOBUF_FL_NO_FF;
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* If we were not just woken because we wanted to send but couldn't,
|
||||
* and there's somebody else that is waiting to send, do nothing,
|
||||
* we will subscribe later and be put at the end of the list
|
||||
|
@ -324,7 +324,7 @@ static int mux_pt_init(struct connection *conn, struct proxy *prx, struct sessio
|
||||
}
|
||||
conn->ctx = ctx;
|
||||
se_fl_set(ctx->sd, SE_FL_RCV_MORE);
|
||||
if (global.tune.options & GTUNE_USE_SPLICE)
|
||||
if ((global.tune.options & GTUNE_USE_SPLICE) && !(global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_PT))
|
||||
se_fl_set(ctx->sd, SE_FL_MAY_FASTFWD_PROD|SE_FL_MAY_FASTFWD_CONS);
|
||||
|
||||
TRACE_LEAVE(PT_EV_CONN_NEW, conn);
|
||||
@ -391,6 +391,8 @@ static int mux_pt_attach(struct connection *conn, struct sedesc *sd, struct sess
|
||||
return -1;
|
||||
ctx->sd = sd;
|
||||
se_fl_set(ctx->sd, SE_FL_RCV_MORE);
|
||||
if ((global.tune.options & GTUNE_USE_SPLICE) && !(global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_PT))
|
||||
se_fl_set(ctx->sd, SE_FL_MAY_FASTFWD_PROD|SE_FL_MAY_FASTFWD_CONS);
|
||||
|
||||
TRACE_LEAVE(PT_EV_STRM_NEW, conn, sd->sc);
|
||||
return 0;
|
||||
@ -656,11 +658,6 @@ static int mux_pt_fastfwd(struct stconn *sc, unsigned int count, unsigned int fl
|
||||
|
||||
TRACE_ENTER(PT_EV_RX_DATA, conn, sc, 0, (size_t[]){count});
|
||||
|
||||
if (global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_PT) {
|
||||
se_fl_clr(ctx->sd, SE_FL_MAY_FASTFWD);
|
||||
goto end;
|
||||
}
|
||||
|
||||
se_fl_clr(ctx->sd, SE_FL_RCV_MORE | SE_FL_WANT_ROOM);
|
||||
conn->flags &= ~CO_FL_WAIT_ROOM;
|
||||
sdo = mux_pt_opposite_sd(ctx);
|
||||
|
@ -2941,11 +2941,6 @@ static size_t qmux_strm_nego_ff(struct stconn *sc, struct buffer *input,
|
||||
/* stream layer has been detached so no transfer must occur after. */
|
||||
BUG_ON_HOT(qcs->flags & QC_SF_DETACH);
|
||||
|
||||
if (global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_QUIC_SND) {
|
||||
qcs->sd->iobuf.flags |= IOBUF_FL_NO_FF;
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!qcs->qcc->app_ops->nego_ff || !qcs->qcc->app_ops->done_ff) {
|
||||
/* Fast forwarding is not supported by the QUIC application layer */
|
||||
qcs->sd->iobuf.flags |= IOBUF_FL_NO_FF;
|
||||
|
@ -4522,7 +4522,7 @@ static void http_stats_io_handler(struct appctx *appctx)
|
||||
if (find_http_meth(istptr(meth), istlen(meth)) == HTTP_METH_HEAD)
|
||||
appctx->st0 = STAT_HTTP_DONE;
|
||||
else {
|
||||
if (!(global.tune.no_zero_copy_fwd & (NO_ZERO_COPY_FWD|NO_ZERO_COPY_FWD_APPLET)))
|
||||
if (!(global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_APPLET))
|
||||
se_fl_set(appctx->sedesc, SE_FL_MAY_FASTFWD_PROD);
|
||||
appctx->st0 = STAT_HTTP_DUMP;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user