)]}'
{"src/builtin/xor_codes/xor_hd_code.c":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3d5143f16225f42e27dd9411f7c931d616431eb4","unresolved":true,"context_lines":[{"line_number":156,"context_line":"  remove_from_missing_list(data_index, missing_data);"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"  // Include all data elements except for this one"},{"line_number":159,"context_line":"  *data_bm |\u003d (code_desc-\u003eparity_bms[parity_index-code_desc-\u003ek]);"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"  // Include this parity element"},{"line_number":162,"context_line":"  if (parity_index \u003e -1) {"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"3ee92698_49f1a64e","side":"PARENT","line":159,"range":{"start_line":159,"start_character":37,"end_line":159,"end_character":49},"updated":"2021-06-29 05:55:06.000000000","message":"FWIW, this is where the bug is: when parity_index \u003d -1, we underflow the array.","commit_id":"9dccbc9ff19694612e02c56289c01e454aff113c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3d5143f16225f42e27dd9411f7c931d616431eb4","unresolved":true,"context_lines":[{"line_number":159,"context_line":"    // Include this parity element"},{"line_number":160,"context_line":"    *parity_bm |\u003d (1 \u003c\u003c (parity_index-code_desc-\u003ek));"},{"line_number":161,"context_line":"    // Include all data elements except for this one"},{"line_number":162,"context_line":"    *data_bm |\u003d (code_desc-\u003eparity_bms[parity_index-code_desc-\u003ek]);"},{"line_number":163,"context_line":"  } else {"},{"line_number":164,"context_line":"    // Include both parity elements"},{"line_number":165,"context_line":"    *parity_bm |\u003d (1 \u003c\u003c (contains_2d-code_desc-\u003ek));"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"d51d6bfd_20be7d17","line":162,"updated":"2021-06-29 05:55:06.000000000","message":"It\u0027s a little weird (especially given the comment) that this doesn\u0027t have a\n\n \u0026 ~((unsigned int)1 \u003c\u003c data_index)","commit_id":"47dcddfa8f920f1a164bba8a60b32f7e403d6be5"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"741eebc8e694e6b922edfaee779fdc2035f088f2","unresolved":true,"context_lines":[{"line_number":165,"context_line":"    *parity_bm |\u003d (1 \u003c\u003c (contains_2d-code_desc-\u003ek));"},{"line_number":166,"context_line":"    *parity_bm |\u003d (1 \u003c\u003c (contains_3d-code_desc-\u003ek));"},{"line_number":167,"context_line":"    // And the data element they didn\u0027t have in common"},{"line_number":168,"context_line":"    *data_bm |\u003d tmp_parity_bm \u0026 ~(1 \u003c\u003c data_index);"},{"line_number":169,"context_line":"  }"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"  ret \u003d fragments_needed_two_data(code_desc, missing_data, missing_parity, data_bm, parity_bm);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"81e30047_bfbdc5b7","line":168,"updated":"2021-06-10 15:48:08.000000000","message":"I have a couple of dumb questions (I classify them as dumb because I do not understand what this code does):\n\nOne. Why is the comment in singular? One element is masked off, but potentially you have more that you add.\n\nTwo. This masking by data_index appears to be redundant with what happens at the and of this function. Is it?","commit_id":"47dcddfa8f920f1a164bba8a60b32f7e403d6be5"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"3d5143f16225f42e27dd9411f7c931d616431eb4","unresolved":true,"context_lines":[{"line_number":165,"context_line":"    *parity_bm |\u003d (1 \u003c\u003c (contains_2d-code_desc-\u003ek));"},{"line_number":166,"context_line":"    *parity_bm |\u003d (1 \u003c\u003c (contains_3d-code_desc-\u003ek));"},{"line_number":167,"context_line":"    // And the data element they didn\u0027t have in common"},{"line_number":168,"context_line":"    *data_bm |\u003d tmp_parity_bm \u0026 ~(1 \u003c\u003c data_index);"},{"line_number":169,"context_line":"  }"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"  ret \u003d fragments_needed_two_data(code_desc, missing_data, missing_parity, data_bm, parity_bm);"}],"source_content_type":"text/x-csrc","patch_set":1,"id":"ec5d3395_b280ca96","line":168,"in_reply_to":"81e30047_bfbdc5b7","updated":"2021-06-29 05:55:06.000000000","message":"Reminder to myself (since I haven\u0027t looked at this in a while): this function is only used when we\u0027re facing three data failures, no parity failures.\n\nOn the first question, I may have extrapolated too quickly from the case that prompted the bug -- with a 6+6 4HD scheme, each parity is connected to exactly three data frags, so when we\u0027ve found Q that hits all three failures and P that only hits two, we know that tmp_parity_bm will have exactly two bits set: one known and one unknown.\n\nBut there are other schemes that need to connect more than three data frags per parity -- for example, 12+6 4HD apparently needs six per parity. This probably should say something like \"And any data elements they didn\u0027t have in common\".\n\nOn the second, I was a little concerned about just doing\n\n *data_bm |\u003d tmp_parity_bm;\n\nthen passing data_bm to fragments_needed_two_data. I hadn\u0027t dug into what the other fragments_needed_* functions might do with data_bm if it claimed to need something that we don\u0027t actually have. Tests pass when just using tmp_parity_bm but I don\u0027t know how good of a signal that is that it\u0027d be safe.\n\nIf I keep this, it should probably have the\n\n (unsigned int)\n\ncast that we\u0027ve got below...","commit_id":"47dcddfa8f920f1a164bba8a60b32f7e403d6be5"}]}
