]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: netconsole: split send_ext_msg_udp() function
authorBreno Leitao <leitao@debian.org>
Thu, 17 Oct 2024 09:50:17 +0000 (02:50 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 22 Oct 2024 13:44:24 +0000 (15:44 +0200)
The send_ext_msg_udp() function has become quite large, currently
spanning 102 lines. Its complexity, along with extensive pointer and
offset manipulation, makes it difficult to read and error-prone.

The function has evolved over time, and it’s now due for a refactor.

To improve readability and maintainability, isolate the case where no
message fragmentation occurs into a separate function, into a new
send_msg_no_fragmentation() function. This scenario covers about 95% of
the messages.

Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/netconsole.c

index a006507c92c6f74f304ebf6523f752e722515b0e..23fe9edff26ed867c5c16ee64765bb7208f7b0c4 100644 (file)
@@ -1058,6 +1058,32 @@ static struct notifier_block netconsole_netdev_notifier = {
        .notifier_call  = netconsole_netdev_event,
 };
 
+static void send_msg_no_fragmentation(struct netconsole_target *nt,
+                                     const char *msg,
+                                     const char *userdata,
+                                     int msg_len,
+                                     int release_len)
+{
+       static char buf[MAX_PRINT_CHUNK]; /* protected by target_list_lock */
+       const char *release;
+
+       if (release_len) {
+               release = init_utsname()->release;
+
+               scnprintf(buf, MAX_PRINT_CHUNK, "%s,%s", release, msg);
+               msg_len += release_len;
+       } else {
+               memcpy(buf, msg, msg_len);
+       }
+
+       if (userdata)
+               msg_len += scnprintf(&buf[msg_len],
+                                    MAX_PRINT_CHUNK - msg_len,
+                                    "%s", userdata);
+
+       netpoll_send_udp(&nt->np, buf, msg_len);
+}
+
 /**
  * send_ext_msg_udp - send extended log message to target
  * @nt: target to send message to
@@ -1090,23 +1116,9 @@ static void send_ext_msg_udp(struct netconsole_target *nt, const char *msg,
                release_len = strlen(release) + 1;
        }
 
-       if (msg_len + release_len + userdata_len <= MAX_PRINT_CHUNK) {
-               /* No fragmentation needed */
-               if (nt->release) {
-                       scnprintf(buf, MAX_PRINT_CHUNK, "%s,%s", release, msg);
-                       msg_len += release_len;
-               } else {
-                       memcpy(buf, msg, msg_len);
-               }
-
-               if (userdata)
-                       msg_len += scnprintf(&buf[msg_len],
-                                            MAX_PRINT_CHUNK - msg_len,
-                                            "%s", userdata);
-
-               netpoll_send_udp(&nt->np, buf, msg_len);
-               return;
-       }
+       if (msg_len + release_len + userdata_len <= MAX_PRINT_CHUNK)
+               return send_msg_no_fragmentation(nt, msg, userdata, msg_len,
+                                                release_len);
 
        /* need to insert extra header fields, detect header and body */
        header = msg;