On Thu, Nov 13, 2025 at 08:42:19AM -0800, Gustavo Luiz Duarte wrote:
Separate userdata and sysdata into distinct buffers to enable independent management. Previously, both were stored in a single extradata_complete buffer with a fixed size that accommodated both types of data.
This separation allows:
- userdata to grow dynamically (in subsequent patch)
- sysdata to remain in a small static buffer
- removal of complex entry counting logic that tracked both types together
The split also simplifies the code by eliminating the need to check total entry count across both userdata and sysdata when enabling features, which allows to drop holding su_mutex on sysdata_*_enabled_store().
No functional change in this patch, just structural preparation for dynamic userdata allocation.
Signed-off-by: Gustavo Luiz Duarte gustavold@gmail.com
Reviewed-by: Breno Leitao leitao@debian.org
<snip>
@@ -1608,13 +1575,24 @@ static void send_fragmented_body(struct netconsole_target *nt, buf_offset += this_chunk; data_sent += this_chunk;
/* after msgbody, append extradata */if (extradata_ptr && extradata_left) {this_chunk = min(extradata_left,
/* after msgbody, append userdata */if (userdata_ptr && userdata_left) {this_chunk = min(userdata_left, MAX_PRINT_CHUNK - buf_offset); memcpy(nt->buf + buf_offset,
extradata_ptr + extradata_offset, this_chunk);extradata_offset += this_chunk;
userdata_ptr + userdata_offset, this_chunk);userdata_offset += this_chunk;buf_offset += this_chunk;data_sent += this_chunk;}/* after userdata, append sysdata */if (sysdata_ptr && sysdata_left) {this_chunk = min(sysdata_left,MAX_PRINT_CHUNK - buf_offset);memcpy(nt->buf + buf_offset,sysdata_ptr + sysdata_offset, this_chunk);sysdata_offset += this_chunk;
This seems all correct and improved, but, I would like to improve this a bit better.
I would like to have a function to append_msg_body(), append_sysdata() and append_userdata(), which is not possible today given these variables.
A possibility is to have a local "struct fat_buffer" that contains all these pointers and offset, then we can pass the struct to these append_XXXXX(struct fat_buffer *) in a row.
I envision something as:
int buf_offset = 0;
while (data_sent < data_len) { buf_offset += append_msgbody(&fat_buffer) buf_offset += append_sysdata(&fat_buffer) buf_offset += append_userdata(&fat_buffer)
send_udp(nt, nt->buf, buf_offset); }
Not sure it will be possible to be as simple as above, but, it will definitely make review easier.
Just to be clear, this is not a request for this patch, but, something that I'd love to have.