aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-11-14 12:31:52 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2016-11-14 12:31:52 -0500
commitf5c9f9c72395c3291c2e35c905dedae2b98475a4 (patch)
treed9ce28fbeb0a3c4baf5d1fcc75e6e0584e18fcc9 /kernel
parentb15efc38626f20f3fc8b831b826b50740d90dab9 (diff)
Revert "printk: make reading the kernel log flush pending lines"
This reverts commit bfd8d3f23b51018388be0411ccbc2d56277fe294. It turns out that this flushes things much too aggressiverly, and causes lines to break up when the system logger races with new continuation lines being printed. There's a pending patch to make printk() flushing much more straightforward, but it's too invasive for 4.9, so in the meantime let's just not make the system message logging flush continuation lines. They'll be flushed by the final newline anyway. Suggested-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/printk/printk.c11
1 files changed, 0 insertions, 11 deletions
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 5028f4fd504a..f7a55e9ff2f7 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -783,8 +783,6 @@ static ssize_t devkmsg_write(struct kiocb *iocb, struct iov_iter *from)
783 return ret; 783 return ret;
784} 784}
785 785
786static void cont_flush(void);
787
788static ssize_t devkmsg_read(struct file *file, char __user *buf, 786static ssize_t devkmsg_read(struct file *file, char __user *buf,
789 size_t count, loff_t *ppos) 787 size_t count, loff_t *ppos)
790{ 788{
@@ -800,7 +798,6 @@ static ssize_t devkmsg_read(struct file *file, char __user *buf,
800 if (ret) 798 if (ret)
801 return ret; 799 return ret;
802 raw_spin_lock_irq(&logbuf_lock); 800 raw_spin_lock_irq(&logbuf_lock);
803 cont_flush();
804 while (user->seq == log_next_seq) { 801 while (user->seq == log_next_seq) {
805 if (file->f_flags & O_NONBLOCK) { 802 if (file->f_flags & O_NONBLOCK) {
806 ret = -EAGAIN; 803 ret = -EAGAIN;
@@ -863,7 +860,6 @@ static loff_t devkmsg_llseek(struct file *file, loff_t offset, int whence)
863 return -ESPIPE; 860 return -ESPIPE;
864 861
865 raw_spin_lock_irq(&logbuf_lock); 862 raw_spin_lock_irq(&logbuf_lock);
866 cont_flush();
867 switch (whence) { 863 switch (whence) {
868 case SEEK_SET: 864 case SEEK_SET:
869 /* the first record */ 865 /* the first record */
@@ -902,7 +898,6 @@ static unsigned int devkmsg_poll(struct file *file, poll_table *wait)
902 poll_wait(file, &log_wait, wait); 898 poll_wait(file, &log_wait, wait);
903 899
904 raw_spin_lock_irq(&logbuf_lock); 900 raw_spin_lock_irq(&logbuf_lock);
905 cont_flush();
906 if (user->seq < log_next_seq) { 901 if (user->seq < log_next_seq) {
907 /* return error when data has vanished underneath us */ 902 /* return error when data has vanished underneath us */
908 if (user->seq < log_first_seq) 903 if (user->seq < log_first_seq)
@@ -1289,7 +1284,6 @@ static int syslog_print(char __user *buf, int size)
1289 size_t skip; 1284 size_t skip;
1290 1285
1291 raw_spin_lock_irq(&logbuf_lock); 1286 raw_spin_lock_irq(&logbuf_lock);
1292 cont_flush();
1293 if (syslog_seq < log_first_seq) { 1287 if (syslog_seq < log_first_seq) {
1294 /* messages are gone, move to first one */ 1288 /* messages are gone, move to first one */
1295 syslog_seq = log_first_seq; 1289 syslog_seq = log_first_seq;
@@ -1349,7 +1343,6 @@ static int syslog_print_all(char __user *buf, int size, bool clear)
1349 return -ENOMEM; 1343 return -ENOMEM;
1350 1344
1351 raw_spin_lock_irq(&logbuf_lock); 1345 raw_spin_lock_irq(&logbuf_lock);
1352 cont_flush();
1353 if (buf) { 1346 if (buf) {
1354 u64 next_seq; 1347 u64 next_seq;
1355 u64 seq; 1348 u64 seq;
@@ -1511,7 +1504,6 @@ int do_syslog(int type, char __user *buf, int len, int source)
1511 /* Number of chars in the log buffer */ 1504 /* Number of chars in the log buffer */
1512 case SYSLOG_ACTION_SIZE_UNREAD: 1505 case SYSLOG_ACTION_SIZE_UNREAD:
1513 raw_spin_lock_irq(&logbuf_lock); 1506 raw_spin_lock_irq(&logbuf_lock);
1514 cont_flush();
1515 if (syslog_seq < log_first_seq) { 1507 if (syslog_seq < log_first_seq) {
1516 /* messages are gone, move to first one */ 1508 /* messages are gone, move to first one */
1517 syslog_seq = log_first_seq; 1509 syslog_seq = log_first_seq;
@@ -3028,7 +3020,6 @@ void kmsg_dump(enum kmsg_dump_reason reason)
3028 dumper->active = true; 3020 dumper->active = true;
3029 3021
3030 raw_spin_lock_irqsave(&logbuf_lock, flags); 3022 raw_spin_lock_irqsave(&logbuf_lock, flags);
3031 cont_flush();
3032 dumper->cur_seq = clear_seq; 3023 dumper->cur_seq = clear_seq;
3033 dumper->cur_idx = clear_idx; 3024 dumper->cur_idx = clear_idx;
3034 dumper->next_seq = log_next_seq; 3025 dumper->next_seq = log_next_seq;
@@ -3119,7 +3110,6 @@ bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog,
3119 bool ret; 3110 bool ret;
3120 3111
3121 raw_spin_lock_irqsave(&logbuf_lock, flags); 3112 raw_spin_lock_irqsave(&logbuf_lock, flags);
3122 cont_flush();
3123 ret = kmsg_dump_get_line_nolock(dumper, syslog, line, size, len); 3113 ret = kmsg_dump_get_line_nolock(dumper, syslog, line, size, len);
3124 raw_spin_unlock_irqrestore(&logbuf_lock, flags); 3114 raw_spin_unlock_irqrestore(&logbuf_lock, flags);
3125 3115
@@ -3162,7 +3152,6 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
3162 goto out; 3152 goto out;
3163 3153
3164 raw_spin_lock_irqsave(&logbuf_lock, flags); 3154 raw_spin_lock_irqsave(&logbuf_lock, flags);
3165 cont_flush();
3166 if (dumper->cur_seq < log_first_seq) { 3155 if (dumper->cur_seq < log_first_seq) {
3167 /* messages are gone, move to first available one */ 3156 /* messages are gone, move to first available one */
3168 dumper->cur_seq = log_first_seq; 3157 dumper->cur_seq = log_first_seq;