]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: mux_h1/h2: simplify the zero-copy Rx alignment
authorWilly Tarreau <w@1wt.eu>
Fri, 14 Dec 2018 09:59:15 +0000 (10:59 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 14 Dec 2018 09:59:15 +0000 (10:59 +0100)
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.

src/mux_h1.c
src/mux_h2.c

index 7031d533fb6a6a1f61072daaf9da21acfba3fcd3..a20e29a32a5676c2d7c2643000ca5108d03bdcf9 100644 (file)
@@ -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;
index 2e3753d7c974a6e72a4922aa40487a2d4975a902..4ca0907b6c29f47c550f53986f3be0fda983173e 100644 (file)
@@ -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))