@@ -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))