printk: Remove print_prefix() calls with NULL buffer.
authorTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Tue, 11 Dec 2018 09:49:05 +0000 (18:49 +0900)
committerPetr Mladek <pmladek@suse.com>
Wed, 12 Dec 2018 10:21:14 +0000 (11:21 +0100)
We can save lines/size by removing print_prefix() with buf == NULL.
This patch makes no functional change.

Link: http://lkml.kernel.org/r/1544521745-11925-1-git-send-email-penguin-kernel@I-love.SAKURA.ne.jp
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Signed-off-by: Petr Mladek <pmladek@suse.com>
kernel/printk/printk.c

index c7d2177..91db332 100644 (file)
@@ -1228,13 +1228,15 @@ static inline void boot_delay_msec(int level)
 static bool printk_time = IS_ENABLED(CONFIG_PRINTK_TIME);
 module_param_named(time, printk_time, bool, S_IRUGO | S_IWUSR);
 
+static size_t print_syslog(unsigned int level, char *buf)
+{
+       return sprintf(buf, "<%u>", level);
+}
+
 static size_t print_time(u64 ts, char *buf)
 {
        unsigned long rem_nsec = do_div(ts, 1000000000);
 
-       if (!buf)
-               return snprintf(NULL, 0, "[%5lu.000000] ", (unsigned long)ts);
-
        return sprintf(buf, "[%5lu.%06lu] ",
                       (unsigned long)ts, rem_nsec / 1000);
 }
@@ -1243,24 +1245,11 @@ static size_t print_prefix(const struct printk_log *msg, bool syslog,
                           bool time, char *buf)
 {
        size_t len = 0;
-       unsigned int prefix = (msg->facility << 3) | msg->level;
-
-       if (syslog) {
-               if (buf) {
-                       len += sprintf(buf, "<%u>", prefix);
-               } else {
-                       len += 3;
-                       if (prefix > 999)
-                               len += 3;
-                       else if (prefix > 99)
-                               len += 2;
-                       else if (prefix > 9)
-                               len++;
-               }
-       }
 
+       if (syslog)
+               len = print_syslog((msg->facility << 3) | msg->level, buf);
        if (time)
-               len += print_time(msg->ts_nsec, buf ? buf + len : NULL);
+               len += print_time(msg->ts_nsec, buf + len);
        return len;
 }
 
@@ -1270,6 +1259,8 @@ static size_t msg_print_text(const struct printk_log *msg, bool syslog,
        const char *text = log_text(msg);
        size_t text_size = msg->text_len;
        size_t len = 0;
+       char prefix[PREFIX_MAX];
+       const size_t prefix_len = print_prefix(msg, syslog, time, prefix);
 
        do {
                const char *next = memchr(text, '\n', text_size);
@@ -1284,19 +1275,17 @@ static size_t msg_print_text(const struct printk_log *msg, bool syslog,
                }
 
                if (buf) {
-                       if (print_prefix(msg, syslog, time, NULL) +
-                           text_len + 1 >= size - len)
+                       if (prefix_len + text_len + 1 >= size - len)
                                break;
 
-                       len += print_prefix(msg, syslog, time, buf + len);
+                       memcpy(buf + len, prefix, prefix_len);
+                       len += prefix_len;
                        memcpy(buf + len, text, text_len);
                        len += text_len;
                        buf[len++] = '\n';
                } else {
                        /* SYSLOG_ACTION_* buffer size only calculation */
-                       len += print_prefix(msg, syslog, time, NULL);
-                       len += text_len;
-                       len++;
+                       len += prefix_len + text_len + 1;
                }
 
                text = next;