From: Mateusz Majewski Date: Fri, 10 Sep 2021 10:12:02 +0000 (+0200) Subject: 🔐 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=25e095e1e6cd7594b9d3b1b4e24bbae23bf14ca0;p=platform%2Fkernel%2Flinux-tizen-modules.git 🔐 Change-Id: I028391ae1fd09e6281446958b8bd3ff2f91492de --- diff --git a/kernel/logger.c b/kernel/logger.c index 48dbf4a..37867a8 100644 --- a/kernel/logger.c +++ b/kernel/logger.c @@ -531,7 +531,7 @@ static void write_log_data(struct logger_log *log, log->w_off = logger_offset(log, w_off + chunk_len); } -static void flush_thread_data(struct file* file) +static void flush_thread_data(struct file* file, bool log_locked) { struct logger_writer *writer = file->private_data; struct logger_log *log = file_get_log(file); @@ -540,10 +540,16 @@ static void flush_thread_data(struct file* file) chunk_len = writer->b_off + 1; writer->b_header.len = chunk_len + writer->tag_len + 2; + if (!log_locked) + mutex_lock(&log->mutex); + fix_up_readers(log, sizeof(struct logger_entry) + writer->b_header.len); write_log_data(log, &writer->b_header, writer, chunk_len); + if (!log_locked) + mutex_unlock(&log->mutex); + writer->b_off = 0; writer->buffer[0] = '\0'; } @@ -625,7 +631,7 @@ static ssize_t logger_write_iter(struct kiocb *iocb, struct iov_iter *from) /* flush message from a different thread */ if (writer->b_owner != current && writer->b_off) - flush_thread_data(file); + flush_thread_data(file, true); count = 0; /* -1 : leave space for message terminating '\0' */ @@ -809,7 +815,7 @@ static int logger_release(struct inode *ignored, struct file *file) bool from_stdio = writer->tag && writer->prio >= 2; if (from_stdio && writer->b_off > 0) - flush_thread_data(file); + flush_thread_data(file, false); kfree(writer->tag); kfree(writer->buffer);