From: Mateusz Majewski Date: Tue, 13 Jul 2021 09:47:15 +0000 (+0200) Subject: logger: flush remaining data from stdio writers on file release X-Git-Tag: submit/tizen/20211126.100737~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d97fec48acf2040d9a9419a864c2789f5569b069;p=platform%2Fkernel%2Flinux-tizen-modules-source.git logger: flush remaining data from stdio writers on file release Unlike logs from regular writers, logs from stdio writers are not contained in a single write_iter call: if the last character written in the call is not a newline, some of the input remains in the buffer for the next write_iter call. This means that some data might remain in the buffer during release, and such data has to be flushed; otherwise, it would be lost. Change-Id: I13c9dc020967fe8ef3fbcd52d45f85b8725d3c2c Signed-off-by: Mateusz Majewski --- diff --git a/kernel/logger.c b/kernel/logger.c index ce2b13c..48dbf4a 100644 --- a/kernel/logger.c +++ b/kernel/logger.c @@ -792,8 +792,6 @@ static int logger_open(struct inode *inode, struct file *file) /* * logger_release - the log's release file operation - * - * Note this is a total no-op in the write-only case. Keep it that way! */ static int logger_release(struct inode *ignored, struct file *file) { @@ -809,6 +807,10 @@ static int logger_release(struct inode *ignored, struct file *file) } else { struct logger_writer *writer = file->private_data; + bool from_stdio = writer->tag && writer->prio >= 2; + if (from_stdio && writer->b_off > 0) + flush_thread_data(file); + kfree(writer->tag); kfree(writer->buffer); kfree(writer);