From: Willy Tarreau Date: Fri, 14 Dec 2018 09:59:15 +0000 (+0100) Subject: MINOR: mux_h1/h2: simplify the zero-copy Rx alignment X-Git-Tag: v1.9-dev11~49 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c0960d118516d4bf43bd0f9a0993abdc5d996847;p=thirdparty%2Fhaproxy.git MINOR: mux_h1/h2: simplify the zero-copy Rx alignment The transpory layer now respects buffer alignment, so we don't need to cheat anymore pretending we have some data at the head, adjusting the buffer's head is enough. --- diff --git a/src/mux_h1.c b/src/mux_h1.c index 7031d533fb..a20e29a32a 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -1664,7 +1664,6 @@ static int h1_recv(struct h1c *h1c) max = buf_room_for_htx_data(&h1c->ibuf); if (max) { - int aligned = 0; h1c->flags &= ~H1C_F_IN_FULL; b_realign_if_empty(&h1c->ibuf); @@ -1672,14 +1671,9 @@ static int h1_recv(struct h1c *h1c) /* try to pre-align the buffer like the rxbufs will be * to optimize memory copies. */ - h1c->ibuf.data = sizeof(struct htx); - aligned = 1; - } - ret = conn->xprt->rcv_buf(conn, &h1c->ibuf, max, 0); - if (aligned) { - h1c->ibuf.data -= sizeof(struct htx); h1c->ibuf.head = sizeof(struct htx); } + ret = conn->xprt->rcv_buf(conn, &h1c->ibuf, max, 0); } if (ret > 0) { rcvd = 1; diff --git a/src/mux_h2.c b/src/mux_h2.c index 2e3753d7c9..4ca0907b6c 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -2444,8 +2444,6 @@ static int h2_recv(struct h2c *h2c) } do { - int aligned = 0; - b_realign_if_empty(buf); if (!b_data(buf) && (h2c->proxy->options2 & PR_O2_USE_HTX)) { /* HTX in use : try to pre-align the buffer like the @@ -2457,9 +2455,7 @@ static int h2_recv(struct h2c *h2c) * have a few bytes there. */ max = buf_room_for_htx_data(buf) + 9; - buf->head = 0; - buf->data = sizeof(struct htx) - 9; - aligned = 1; + buf->head = sizeof(struct htx) - 9; } else max = b_room(buf); @@ -2468,11 +2464,6 @@ static int h2_recv(struct h2c *h2c) ret = conn->xprt->rcv_buf(conn, buf, max, 0); else ret = 0; - - if (aligned) { - buf->data -= sizeof(struct htx) - 9; - buf->head = sizeof(struct htx) - 9; - } } while (ret > 0); if (h2_recv_allowed(h2c) && (b_data(buf) < buf->size))