kernfs: sysfs: support custom llseek method for sysfs entries
authorValentine Sinitsyn <valesini@yandex-team.ru>
Mon, 25 Sep 2023 08:40:12 +0000 (11:40 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 5 Oct 2023 11:42:11 +0000 (13:42 +0200)
commit0fedefd4c4e33dd24f726b13b5d7c143e2b483be
treecf84459a4ef3e035265bd133847b1ea202d963ff
parent7360a48bd0f5e62b2d00c387d5d3f2821eb290ce
kernfs: sysfs: support custom llseek method for sysfs entries

As of now, seeking in sysfs files is handled by generic_file_llseek().
There are situations where one may want to customize seeking logic:

- Many sysfs entries are fixed files while generic_file_llseek() accepts
  past-the-end positions. Not only being useless by itself, this
  also means a bug in userspace code will trigger not at lseek(), but at
  some later point making debugging harder.
- generic_file_llseek() relies on f_mapping->host to get the file size
  which might not be correct for all sysfs entries.
  See commit 636b21b50152 ("PCI: Revoke mappings like devmem") as an example.

Implement llseek method to override this behavior at sysfs attribute
level. The method is optional, and if it is absent,
generic_file_llseek() is called to preserve backwards compatibility.

Signed-off-by: Valentine Sinitsyn <valesini@yandex-team.ru>
Link: https://lore.kernel.org/r/20230925084013.309399-1-valesini@yandex-team.ru
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/kernfs/file.c
fs/sysfs/file.c
include/linux/kernfs.h
include/linux/sysfs.h