)]}'
{"include/erasurecode/erasurecode_backend.h":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":148,"context_line":"/* EC session definition - a per-caller context for data-path operations */"},{"line_number":149,"context_line":"struct ec_session {"},{"line_number":150,"context_line":"    struct ec_backend  *backend;         /* non-owning reference to parent instance */"},{"line_number":151,"context_line":"    pthread_t           owner_tid;       /* thread that opened this session */"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    /* Buffer cache — populated when session_open is called with max_data_size \u003e 0."},{"line_number":154,"context_line":"     * All pointers are NULL in the per-call-alloc mode (max_data_size \u003d\u003d 0). */"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"f4b6e827_03b011c1","line":151,"updated":"2026-04-06 04:41:22.000000000","message":"If we get the alignment right the first time on the parent patch, we can eliminate some of this diff.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":148,"context_line":"/* EC session definition - a per-caller context for data-path operations */"},{"line_number":149,"context_line":"struct ec_session {"},{"line_number":150,"context_line":"    struct ec_backend  *backend;         /* non-owning reference to parent instance */"},{"line_number":151,"context_line":"    pthread_t           owner_tid;       /* thread that opened this session */"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    /* Buffer cache — populated when session_open is called with max_data_size \u003e 0."},{"line_number":154,"context_line":"     * All pointers are NULL in the per-call-alloc mode (max_data_size \u003d\u003d 0). */"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"498dec29_575244c1","line":151,"in_reply_to":"f4b6e827_03b011c1","updated":"2026-04-08 01:27:47.000000000","message":"Done","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":153,"context_line":"    /* Buffer cache — populated when session_open is called with max_data_size \u003e 0."},{"line_number":154,"context_line":"     * All pointers are NULL in the per-call-alloc mode (max_data_size \u003d\u003d 0). */"},{"line_number":155,"context_line":"    uint64_t            max_data_size;   /* 0 \u003d per-call alloc mode */"},{"line_number":156,"context_line":"    size_t              max_frag_size;   /* sizeof(fragment_header_t) + max_blocksize + metadata */"},{"line_number":157,"context_line":"    char               *frags_buf;       /* (k+m) * max_frag_size bytes, 16-byte aligned */"},{"line_number":158,"context_line":"    char              **data;            /* k fragment pointers into frags_buf */"},{"line_number":159,"context_line":"    char              **parity;          /* m fragment pointers into frags_buf */"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"2353ee28_a54a4962","line":156,"range":{"start_line":156,"start_character":24,"end_line":156,"end_character":37},"updated":"2026-04-06 04:41:22.000000000","message":"Should probably rename this as something like `frag_buf_size` -- it\u0027s the size of each (aligned) buffer for each frag. We never seem to compare it against some user-supplied frag size, say.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    /* Buffer cache — populated when session_open is called with max_data_size \u003e 0."},{"line_number":154,"context_line":"     * All pointers are NULL in the per-call-alloc mode (max_data_size \u003d\u003d 0). */"},{"line_number":155,"context_line":"    uint64_t            max_data_size;   /* 0 \u003d per-call alloc mode */"},{"line_number":156,"context_line":"    size_t              max_frag_size;   /* sizeof(fragment_header_t) + max_blocksize + metadata */"},{"line_number":157,"context_line":"    char               *frags_buf;       /* (k+m) * max_frag_size bytes, 16-byte aligned */"},{"line_number":158,"context_line":"    char              **data;            /* k fragment pointers into frags_buf */"},{"line_number":159,"context_line":"    char              **parity;          /* m fragment pointers into frags_buf */"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"c38784d0_6b203c14","line":156,"range":{"start_line":156,"start_character":24,"end_line":156,"end_character":37},"in_reply_to":"2353ee28_a54a4962","updated":"2026-04-08 01:27:47.000000000","message":"Done","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":158,"context_line":"    char              **data;            /* k fragment pointers into frags_buf */"},{"line_number":159,"context_line":"    char              **parity;          /* m fragment pointers into frags_buf */"},{"line_number":160,"context_line":"    int                *missing_idxs;    /* (k+m) ints for decode/reconstruct working space */"},{"line_number":161,"context_line":"    char              **data_segments;   /* k data-section pointers (decode/reconstruct) */"},{"line_number":162,"context_line":"    char              **parity_segments; /* m data-section pointers (decode/reconstruct) */"},{"line_number":163,"context_line":"    char               *decode_buf;      /* used for decode output */"},{"line_number":164,"context_line":"};"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"8c5fd8c4_88a59217","line":161,"updated":"2026-04-06 04:41:22.000000000","message":"How is this different from `data`? How is `parity_segments` different from `parity`?\n\nOK, it looks like it\u0027s something to do with start-of-frag vs start-of-payload-within-frag.... but I feel like we could instead do something elsewhere with `buf ? buf + sizeof(fragment_header_t) : buf`... IDK that we need to perpetuate this...","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"}],"include/erasurecode/erasurecode_preprocessing.h":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":40,"context_line":"        int k, int m,"},{"line_number":41,"context_line":"        const char *orig_data, uint64_t orig_data_size, /* input */"},{"line_number":42,"context_line":"        char **encoded_data, char **encoded_parity,     /* output */"},{"line_number":43,"context_line":"        char *frag_buf, size_t frag_size,               /* slab or NULL/0 */"},{"line_number":44,"context_line":"        int *blocksize);"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"/*"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"32202c82_2fd2864f","line":43,"updated":"2026-04-06 04:41:22.000000000","message":"Should probably move this up so we can keep input params together (and ahead of output params). Here and elsewhere.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"}],"src/erasurecode_preprocessing.c":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"6c3ffc884a858af2aa8ea688382b65040ec3edfe","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    buffer_size \u003d payload_size + metadata_size;"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    if (frag_buf) {"},{"line_number":70,"context_line":"        memset(frag_buf, 0, (k + m) * frag_size);"},{"line_number":71,"context_line":"        for (i \u003d 0; i \u003c k + m; i++) {"},{"line_number":72,"context_line":"            fragment_header_t *header \u003d (fragment_header_t *) (frag_buf + i * frag_size);"},{"line_number":73,"context_line":"            header-\u003emagic \u003d LIBERASURECODE_FRAG_HEADER_MAGIC;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"282bf8b7_31a69b5f","line":70,"updated":"2026-04-07 00:22:07.000000000","message":"This is likely overkill -- if we\u0027re encoding, we\u0027re about to write over most/all of this. Certainly all of the payload areas, which should be the bulk. With the non-buffer-cache path, we use `calloc` and let the kernel give us space from already-empty pages -- by comparison, this can really add up.\n```\ndiff --git a/src/erasurecode_preprocessing.c b/src/erasurecode_preprocessing.c\nindex d0af704..92242bb 100644\n--- a/src/erasurecode_preprocessing.c\n+++ b/src/erasurecode_preprocessing.c\n@@ -67,8 +67,8 @@ int prepare_fragments_for_encode(ec_backend_t instance,\n     buffer_size \u003d payload_size + metadata_size;\n \n     if (frag_buf) {\n-        memset(frag_buf, 0, (k + m) * frag_size);\n         for (i \u003d 0; i \u003c k + m; i++) {\n+            memset(frag_buf + i * frag_size, 0, sizeof(fragment_header_t));\n             fragment_header_t *header \u003d (fragment_header_t *) (frag_buf + i * frag_size);\n             header-\u003emagic \u003d LIBERASURECODE_FRAG_HEADER_MAGIC;\n         }\n```\nshould noticeably speed up encoding.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    buffer_size \u003d payload_size + metadata_size;"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    if (frag_buf) {"},{"line_number":70,"context_line":"        memset(frag_buf, 0, (k + m) * frag_size);"},{"line_number":71,"context_line":"        for (i \u003d 0; i \u003c k + m; i++) {"},{"line_number":72,"context_line":"            fragment_header_t *header \u003d (fragment_header_t *) (frag_buf + i * frag_size);"},{"line_number":73,"context_line":"            header-\u003emagic \u003d LIBERASURECODE_FRAG_HEADER_MAGIC;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"0d570c8a_6fba7f27","line":70,"in_reply_to":"282bf8b7_31a69b5f","updated":"2026-04-08 01:27:47.000000000","message":"Done","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":78,"context_line":"        int copy_size \u003d data_len \u003e payload_size ? payload_size : data_len;"},{"line_number":79,"context_line":"        char *fragment \u003d frag_buf ? frag_buf + i * frag_size"},{"line_number":80,"context_line":"                                  : alloc_fragment_buffer(buffer_size);"},{"line_number":81,"context_line":"        if (!frag_buf \u0026\u0026 NULL \u003d\u003d fragment) {"},{"line_number":82,"context_line":"            ret \u003d -ENOMEM;"},{"line_number":83,"context_line":"            goto out_error;"},{"line_number":84,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"ad40f87a_99b05576","line":81,"range":{"start_line":81,"start_character":12,"end_line":81,"end_character":24},"updated":"2026-04-06 04:41:22.000000000","message":"Not needed -- `!!frag_buf` implies `fragment !\u003d NULL`","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        int copy_size \u003d data_len \u003e payload_size ? payload_size : data_len;"},{"line_number":79,"context_line":"        char *fragment \u003d frag_buf ? frag_buf + i * frag_size"},{"line_number":80,"context_line":"                                  : alloc_fragment_buffer(buffer_size);"},{"line_number":81,"context_line":"        if (!frag_buf \u0026\u0026 NULL \u003d\u003d fragment) {"},{"line_number":82,"context_line":"            ret \u003d -ENOMEM;"},{"line_number":83,"context_line":"            goto out_error;"},{"line_number":84,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"2aaf5eeb_0e3149f2","line":81,"range":{"start_line":81,"start_character":12,"end_line":81,"end_character":24},"in_reply_to":"ad40f87a_99b05576","updated":"2026-04-08 01:27:47.000000000","message":"Done","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":97,"context_line":"    for (i \u003d 0; i \u003c m; i++) {"},{"line_number":98,"context_line":"        char *fragment \u003d frag_buf ? frag_buf + (k + i) * frag_size"},{"line_number":99,"context_line":"                                  : alloc_fragment_buffer(buffer_size);"},{"line_number":100,"context_line":"        if (!frag_buf \u0026\u0026 NULL \u003d\u003d fragment) {"},{"line_number":101,"context_line":"            ret \u003d -ENOMEM;"},{"line_number":102,"context_line":"            goto out_error;"},{"line_number":103,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"bf965662_6979e9b6","line":100,"updated":"2026-04-06 04:41:22.000000000","message":"Here too.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    for (i \u003d 0; i \u003c m; i++) {"},{"line_number":98,"context_line":"        char *fragment \u003d frag_buf ? frag_buf + (k + i) * frag_size"},{"line_number":99,"context_line":"                                  : alloc_fragment_buffer(buffer_size);"},{"line_number":100,"context_line":"        if (!frag_buf \u0026\u0026 NULL \u003d\u003d fragment) {"},{"line_number":101,"context_line":"            ret \u003d -ENOMEM;"},{"line_number":102,"context_line":"            goto out_error;"},{"line_number":103,"context_line":"        }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"9a857478_e370ec9f","line":100,"in_reply_to":"bf965662_6979e9b6","updated":"2026-04-08 01:27:47.000000000","message":"Done","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":171,"context_line":"        if (NULL \u003d\u003d data[i]) {"},{"line_number":172,"context_line":"            data[i] \u003d frag_buf ? frag_buf + i * frag_size"},{"line_number":173,"context_line":"                               : alloc_fragment_buffer(fragment_size - sizeof(fragment_header_t));"},{"line_number":174,"context_line":"            if (!frag_buf \u0026\u0026 NULL \u003d\u003d data[i]) {"},{"line_number":175,"context_line":"                log_error(\"Could not allocate data buffer!\");"},{"line_number":176,"context_line":"                return -ENOMEM;"},{"line_number":177,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"e5fc8cb6_5762024e","line":174,"updated":"2026-04-06 04:41:22.000000000","message":"Similar here.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        if (NULL \u003d\u003d data[i]) {"},{"line_number":172,"context_line":"            data[i] \u003d frag_buf ? frag_buf + i * frag_size"},{"line_number":173,"context_line":"                               : alloc_fragment_buffer(fragment_size - sizeof(fragment_header_t));"},{"line_number":174,"context_line":"            if (!frag_buf \u0026\u0026 NULL \u003d\u003d data[i]) {"},{"line_number":175,"context_line":"                log_error(\"Could not allocate data buffer!\");"},{"line_number":176,"context_line":"                return -ENOMEM;"},{"line_number":177,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"e0449653_14870892","line":174,"in_reply_to":"e5fc8cb6_5762024e","updated":"2026-04-08 01:27:47.000000000","message":"Done","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":179,"context_line":"        } else if (!is_addr_aligned((unsigned long)data[i], 16)) {"},{"line_number":180,"context_line":"            char *tmp_buf \u003d frag_buf ? frag_buf + i * frag_size"},{"line_number":181,"context_line":"                                     : alloc_fragment_buffer(fragment_size - sizeof(fragment_header_t));"},{"line_number":182,"context_line":"            if (!frag_buf \u0026\u0026 NULL \u003d\u003d tmp_buf) {"},{"line_number":183,"context_line":"                log_error(\"Could not allocate temp buffer!\");"},{"line_number":184,"context_line":"                return -ENOMEM;"},{"line_number":185,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"22ac7d8d_53ae5d66","line":182,"updated":"2026-04-06 04:41:22.000000000","message":"And here.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        } else if (!is_addr_aligned((unsigned long)data[i], 16)) {"},{"line_number":180,"context_line":"            char *tmp_buf \u003d frag_buf ? frag_buf + i * frag_size"},{"line_number":181,"context_line":"                                     : alloc_fragment_buffer(fragment_size - sizeof(fragment_header_t));"},{"line_number":182,"context_line":"            if (!frag_buf \u0026\u0026 NULL \u003d\u003d tmp_buf) {"},{"line_number":183,"context_line":"                log_error(\"Could not allocate temp buffer!\");"},{"line_number":184,"context_line":"                return -ENOMEM;"},{"line_number":185,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"1c370051_3358ebd1","line":182,"in_reply_to":"22ac7d8d_53ae5d66","updated":"2026-04-08 01:27:47.000000000","message":"Done","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":196,"context_line":"                return -EBADHEADER;"},{"line_number":197,"context_line":"            }"},{"line_number":198,"context_line":"            payload_size \u003d get_fragment_payload_size(data[i]);"},{"line_number":199,"context_line":"            if (payload_size \u003c 0) {"},{"line_number":200,"context_line":"                log_error(\"Invalid fragment_size in fragment header!\");"},{"line_number":201,"context_line":"                return -EBADHEADER;"},{"line_number":202,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"3db0fb17_0a38b6b6","line":199,"updated":"2026-04-06 04:41:22.000000000","message":"This should be a separate fix all on its own.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                return -EBADHEADER;"},{"line_number":197,"context_line":"            }"},{"line_number":198,"context_line":"            payload_size \u003d get_fragment_payload_size(data[i]);"},{"line_number":199,"context_line":"            if (payload_size \u003c 0) {"},{"line_number":200,"context_line":"                log_error(\"Invalid fragment_size in fragment header!\");"},{"line_number":201,"context_line":"                return -EBADHEADER;"},{"line_number":202,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"5e85397f_c3ff126f","line":199,"in_reply_to":"3db0fb17_0a38b6b6","updated":"2026-04-08 01:27:47.000000000","message":"https://review.opendev.org/c/openstack/liberasurecode/+/983483","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":212,"context_line":"        if (NULL \u003d\u003d parity[i]) {"},{"line_number":213,"context_line":"            parity[i] \u003d frag_buf ? frag_buf + (k + i) * frag_size"},{"line_number":214,"context_line":"                                 : alloc_fragment_buffer(fragment_size - sizeof(fragment_header_t));"},{"line_number":215,"context_line":"            if (!frag_buf \u0026\u0026 NULL \u003d\u003d parity[i]) {"},{"line_number":216,"context_line":"                log_error(\"Could not allocate parity buffer!\");"},{"line_number":217,"context_line":"                return -ENOMEM;"},{"line_number":218,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"dfa49bdd_fde9e211","line":215,"updated":"2026-04-06 04:41:22.000000000","message":"Another one.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        if (NULL \u003d\u003d parity[i]) {"},{"line_number":213,"context_line":"            parity[i] \u003d frag_buf ? frag_buf + (k + i) * frag_size"},{"line_number":214,"context_line":"                                 : alloc_fragment_buffer(fragment_size - sizeof(fragment_header_t));"},{"line_number":215,"context_line":"            if (!frag_buf \u0026\u0026 NULL \u003d\u003d parity[i]) {"},{"line_number":216,"context_line":"                log_error(\"Could not allocate parity buffer!\");"},{"line_number":217,"context_line":"                return -ENOMEM;"},{"line_number":218,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"f3ff6f24_fc0b8046","line":215,"in_reply_to":"dfa49bdd_fde9e211","updated":"2026-04-08 01:27:47.000000000","message":"Done","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":220,"context_line":"        } else if (!is_addr_aligned((unsigned long)parity[i], 16)) {"},{"line_number":221,"context_line":"            char *tmp_buf \u003d frag_buf ? frag_buf + (k + i) * frag_size"},{"line_number":222,"context_line":"                                     : alloc_fragment_buffer(fragment_size - sizeof(fragment_header_t));"},{"line_number":223,"context_line":"            if (!frag_buf \u0026\u0026 NULL \u003d\u003d tmp_buf) {"},{"line_number":224,"context_line":"                log_error(\"Could not allocate temp buffer!\");"},{"line_number":225,"context_line":"                return -ENOMEM;"},{"line_number":226,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"c1980f40_bc784a8f","line":223,"updated":"2026-04-06 04:41:22.000000000","message":"And here.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        } else if (!is_addr_aligned((unsigned long)parity[i], 16)) {"},{"line_number":221,"context_line":"            char *tmp_buf \u003d frag_buf ? frag_buf + (k + i) * frag_size"},{"line_number":222,"context_line":"                                     : alloc_fragment_buffer(fragment_size - sizeof(fragment_header_t));"},{"line_number":223,"context_line":"            if (!frag_buf \u0026\u0026 NULL \u003d\u003d tmp_buf) {"},{"line_number":224,"context_line":"                log_error(\"Could not allocate temp buffer!\");"},{"line_number":225,"context_line":"                return -ENOMEM;"},{"line_number":226,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"48fba2d1_aa55b1d0","line":223,"in_reply_to":"c1980f40_bc784a8f","updated":"2026-04-08 01:27:47.000000000","message":"Done","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":237,"context_line":"                return -EBADHEADER;"},{"line_number":238,"context_line":"            }"},{"line_number":239,"context_line":"            payload_size \u003d get_fragment_payload_size(parity[i]);"},{"line_number":240,"context_line":"            if (payload_size \u003c 0) {"},{"line_number":241,"context_line":"                log_error(\"Invalid fragment_size in fragment header!\");"},{"line_number":242,"context_line":"                return -EBADHEADER;"},{"line_number":243,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"5061f55a_d9efd53d","line":240,"updated":"2026-04-06 04:41:22.000000000","message":"Similarly, should be part of separate, isolated fix.","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"54a25d960c04c4a4186cb51e11027c0019bb6f0b","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                return -EBADHEADER;"},{"line_number":238,"context_line":"            }"},{"line_number":239,"context_line":"            payload_size \u003d get_fragment_payload_size(parity[i]);"},{"line_number":240,"context_line":"            if (payload_size \u003c 0) {"},{"line_number":241,"context_line":"                log_error(\"Invalid fragment_size in fragment header!\");"},{"line_number":242,"context_line":"                return -EBADHEADER;"},{"line_number":243,"context_line":"            }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"100d4670_4e90be88","line":240,"in_reply_to":"5061f55a_d9efd53d","updated":"2026-04-08 01:27:47.000000000","message":"https://review.opendev.org/c/openstack/liberasurecode/+/983483","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":317,"context_line":"        char **orig_payload, uint64_t *payload_len,"},{"line_number":318,"context_line":"        char *out_buf, uint64_t buf_size)"},{"line_number":319,"context_line":"{"},{"line_number":320,"context_line":"    char *data[EC_MAX_FRAGMENTS];"},{"line_number":321,"context_line":"    int orig_data_size \u003d -1;"},{"line_number":322,"context_line":"    int i, index, data_size;"},{"line_number":323,"context_line":"    int num_data \u003d 0;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"1eb294b8_44ddf930","line":320,"range":{"start_line":320,"start_character":15,"end_line":320,"end_character":31},"updated":"2026-04-06 04:41:22.000000000","message":"Wat. Where\u0027d this come from? Why so big? I mean, maybe not *so* big -- with 64-bit pointers even after bumping up to 256 max frags, we\u0027re only talking 1k... Why isn\u0027t it aligned? Did that matter?\n\n(Note that backing this part out would also require that we bring back the `free(data)` down in `out`.)","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"8a5a527b95730a46952dd40f5c418a2b8f8043b1","unresolved":true,"context_lines":[{"line_number":375,"context_line":"        goto out;"},{"line_number":376,"context_line":"    }"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    if (orig_data_size \u003c 0) {"},{"line_number":379,"context_line":"        ret \u003d -EBADHEADER;"},{"line_number":380,"context_line":"        goto out;"},{"line_number":381,"context_line":"    }"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"f0a82e5b_6ba15549","line":378,"updated":"2026-04-06 04:41:22.000000000","message":"So... `num_fragments \u003d\u003d 0`? Or (I guess) all the fragments had a bad, negative value....\n\nSmells like a separate bug fix. Or something that should get caught earlier (like, on the *first* fragment that has a negative value).","commit_id":"a3494c2336d623038c6a1341aef49d949057c2ac"}]}
