• Jason A. Donenfeld's avatar
    Revert "kernel/printk: add kmsg SEEK_CUR handling" · 625d3449
    Jason A. Donenfeld authored
    This reverts commit 8ece3b3e.
    
    This commit broke userspace. Bash uses ESPIPE to determine whether or
    not the file should be read using "unbuffered I/O", which means reading
    1 byte at a time instead of 128 bytes at a time. I used to use bash to
    read through kmsg in a really quite nasty way:
    
        while read -t 0.1 -r line 2>/dev/null || [[ $? -ne 142 ]]; do
           echo "SARU $line"
        done < /dev/kmsg
    
    This will show all lines that can fit into the 128 byte buffer, and skip
    lines that don't. That's pretty awful, but at least it worked.
    
    With this change, bash now tries to do 1-byte reads, which means it
    skips all the lines, which is worse than before.
    
    Now, I don't really care very much about this, and I'm already look for
    a workaround. But I did just spend an hour trying to figure out why my
    scripts were broken. Either way, it makes no difference to me personally
    whether this is reverted, but it might be something to consider. If you
    declare that "trying to read /dev/kmsg with bash is terminally stupid
    anyway," I might be inclined to agree with you. But do note that bash
    uses lseek(fd, 0, SEEK_CUR)==>ESPIPE to determine whether or not it's
    reading from a pipe.
    
    Cc: Bruno Meneguele <bmeneg@redhat.com>
    Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: David Laight <David.Laight@ACULAB.COM>
    Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Cc: Petr Mladek <pmladek@suse.com>
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    625d3449
printk.c 86.5 KB