summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorBruno Meneguele <bmeneg@redhat.com>2020-07-10 20:44:23 +0300
committerPetr Mladek <pmladek@suse.com>2020-07-13 16:07:45 +0300
commitbc885f1ab6de0d38c6956a71b0126543b64875b0 (patch)
treee89b8331b7a6f73655173380e49113952eeec584 /kernel
parent8eda94bde4ff004a942ed95e6348de711b0e6da9 (diff)
downloadlinux-bc885f1ab6de0d38c6956a71b0126543b64875b0.tar.xz
doc:kmsg: explicitly state the return value in case of SEEK_CUR
The commit 625d3449788f ("Revert "kernel/printk: add kmsg SEEK_CUR handling"") reverted a change done to the return value in case a SEEK_CUR operation was performed for kmsg buffer based on the fact that different userspace apps were handling the new return value (-ESPIPE) in different ways, breaking them. At the same time -ESPIPE was the wrong decision because kmsg /does support/ seek() but doesn't follow the "normal" behavior userspace is used to. Because of that and also considering the time -EINVAL has been used, it was decided to keep this way to avoid more userspace breakage. This patch adds an official statement to the kmsg documentation pointing to the current return value for SEEK_CUR, -EINVAL, thus userspace libraries and apps can refer to it for a definitive guide on what to expect. Signed-off-by: Bruno Meneguele <bmeneg@redhat.com> Reviewed-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Signed-off-by: Petr Mladek <pmladek@suse.com> Link: https://lore.kernel.org/r/20200710174423.10480-1-bmeneg@redhat.com
Diffstat (limited to 'kernel')
-rw-r--r--kernel/printk/printk.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 8c14835be46c..5f6eca65dd9a 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -943,6 +943,14 @@ out:
return ret;
}
+/*
+ * Be careful when modifying this function!!!
+ *
+ * Only few operations are supported because the device works only with the
+ * entire variable length messages (records). Non-standard values are
+ * returned in the other cases and has been this way for quite some time.
+ * User space applications might depend on this behavior.
+ */
static loff_t devkmsg_llseek(struct file *file, loff_t offset, int whence)
{
struct devkmsg_user *user = file->private_data;