* especially if headers were already forwarded. But it is not
* mandatory.
*/
+ if (!(global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_H1_SND))
+ se_fl_set(h1s->sd, SE_FL_MAY_FASTFWD_CONS);
se_expect_no_data(h1s->sd);
h1s->sess = sess;
h1s->sd = sc->sedesc;
h1s->sess = sess;
+ if (!(global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_H1_SND))
+ se_fl_set(h1s->sd, SE_FL_MAY_FASTFWD_CONS);
h1c->state = H1_CS_RUNNING;
if (h1c->px->options2 & PR_O2_RSPBUG_OK)
h2s->sd->se = h2s;
h2s->sd->conn = h2c->conn;
se_fl_set(h2s->sd, SE_FL_T_MUX | SE_FL_ORPHAN | SE_FL_NOT_FIRST);
+
+ if (!(global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_H2_SND))
+ se_fl_set(h2s->sd, SE_FL_MAY_FASTFWD_CONS);
+
/* The request is not finished, don't expect data from the opposite side
* yet
*/
h2s->sess = sess;
h2c->nb_sc++;
+ if (!(global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_H2_SND))
+ se_fl_set(h2s->sd, SE_FL_MAY_FASTFWD_CONS);
/* on the backend we can afford to only count total streams upon success */
h2c->stream_cnt++;
conn->ctx = ctx;
se_fl_set(ctx->sd, SE_FL_RCV_MORE);
if (global.tune.options & GTUNE_USE_SPLICE)
- se_fl_set(ctx->sd, SE_FL_MAY_FASTFWD_PROD);
+ se_fl_set(ctx->sd, SE_FL_MAY_FASTFWD_PROD|SE_FL_MAY_FASTFWD_CONS);
TRACE_LEAVE(PT_EV_CONN_NEW, conn);
return 0;
se_fl_set(qcs->sd, SE_FL_T_MUX | SE_FL_ORPHAN | SE_FL_NOT_FIRST);
se_expect_no_data(qcs->sd);
+ if (!(global.tune.no_zero_copy_fwd & NO_ZERO_COPY_FWD_QUIC_SND))
+ se_fl_set(qcs->sd, SE_FL_MAY_FASTFWD_CONS);
+
/* TODO duplicated from mux_h2 */
sess->t_idle = ns_to_ms(now_ns - sess->accept_ts) - sess->t_handshake;