]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: dynbuf: set POOL_F_NO_FAIL on buffer allocation
authorWilly Tarreau <w@1wt.eu>
Tue, 21 Mar 2023 08:15:13 +0000 (09:15 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 21 Mar 2023 08:15:13 +0000 (09:15 +0100)
b_alloc() is used to allocate a buffer. We can provoke fault injection
based on forced memory allocation failures using -dMfail on the command
line, but we know that the buffer_wait list is a bit weak and doesn't
always recover well. As such, submitting buffer allocation to such a
treatment seriously limits the usefulness of -dMfail which cannot really
be used for other purposes. Let's just disable it for buffers for now.

include/haproxy/dynbuf.h

index c0a460d05e1d58af42683d515ad413d34970ae39..a89800ca743f3c38d79e92d4c2370ac545d17164 100644 (file)
@@ -58,7 +58,10 @@ static inline int buffer_almost_full(const struct buffer *buf)
 
 /* Ensures that <buf> is allocated, or allocates it. If no memory is available,
  * ((char *)1) is assigned instead with a zero size. The allocated buffer is
- * returned, or NULL in case no memory is available.
+ * returned, or NULL in case no memory is available. Since buffers only contain
+ * user data, poisonning is always disabled as it brings no benefit and impacts
+ * performance. Due to the difficult buffer_wait management, they are not
+ * subject to forced allocation failures either.
  */
 #define b_alloc(_buf) \
 ({                                             \
@@ -67,7 +70,7 @@ static inline int buffer_almost_full(const struct buffer *buf)
                                                \
        if (!_retbuf->size) {                   \
                *_retbuf = BUF_WANTED;                                  \
-               _area = pool_alloc_flag(pool_head_buffer, POOL_F_NO_POISON); \
+               _area = pool_alloc_flag(pool_head_buffer, POOL_F_NO_POISON | POOL_F_NO_FAIL); \
                if (unlikely(!_area)) {                                 \
                        activity[tid].buf_wait++;                       \
                        _retbuf = NULL;                                 \