summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBreno Leitao <leitao@debian.org>2024-10-17 12:50:21 +0300
committerPaolo Abeni <pabeni@redhat.com>2024-10-22 16:44:25 +0300
commitb8dee8ed13b83b701b715dac993582d57c76e31a (patch)
tree158a917cc36f1189ac35f7b5e6abf9efd70c53ab
parent606994ad2695ca3ffcab3494d7782c45d964c6f7 (diff)
downloadlinux-b8dee8ed13b83b701b715dac993582d57c76e31a.tar.xz
net: netconsole: track explicitly if msgbody was written to buffer
The current check to determine if the message body was fully sent is difficult to follow. To improve clarity, introduce a variable that explicitly tracks whether the message body (msgbody) has been completely sent, indicating when it's time to begin sending userdata. Additionally, add comments to make the code more understandable for others who may work with it. Signed-off-by: Breno Leitao <leitao@debian.org> Reviewed-by: Simon Horman <horms@kernel.org> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-rw-r--r--drivers/net/netconsole.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index 6a6806eeb0c6..9a5cca4ee8b8 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -1130,6 +1130,7 @@ static void send_msg_fragmented(struct netconsole_target *nt,
*/
while (offset < body_len) {
int this_header = header_len;
+ bool msgbody_written = false;
int this_offset = 0;
int this_chunk = 0;
@@ -1148,12 +1149,21 @@ static void send_msg_fragmented(struct netconsole_target *nt,
this_offset += this_chunk;
}
+ /* msgbody was finally written, either in the previous
+ * messages and/or in the current buf. Time to write
+ * the userdata.
+ */
+ msgbody_written |= offset + this_offset >= msgbody_len;
+
/* Msg body is fully written and there is pending userdata to
* write, append userdata in this chunk
*/
- if (offset + this_offset >= msgbody_len &&
- offset + this_offset < body_len) {
+ if (msgbody_written && offset + this_offset < body_len) {
+ /* Track how much user data was already sent. First
+ * time here, sent_userdata is zero
+ */
int sent_userdata = (offset + this_offset) - msgbody_len;
+ /* offset of bytes used in current buf */
int preceding_bytes = this_chunk + this_header;
if (WARN_ON_ONCE(sent_userdata < 0))