mbox series

[v5,0/3] fanotify accounting for fs/splice.c

Message ID cover.1688393619.git.nabijaczleweli@nabijaczleweli.xyz (mailing list archive)
Headers show
Series fanotify accounting for fs/splice.c | expand

Message

наб July 3, 2023, 2:42 p.m. UTC
Previously: https://lore.kernel.org/linux-fsdevel/jbyihkyk5dtaohdwjyivambb2gffyjs3dodpofafnkkunxq7bu@jngkdxx65pux/t/#u

In short:
  * most read/write APIs generate ACCESS/MODIFY for the read/written file(s)
  * except the [vm]splice/tee family
    (actually, since 6.4, splice itself /does/ generate events but only
     for the non-pipes being spliced from/to; this commit is Fixes:ed)
  * userspace that registers (i|fa)notify on pipes usually relies on it
    actually working (coreutils tail -f is the primo example)
  * it's sub-optimal when someone with a magic syscall can fill up a
    pipe simultaneously ensuring it will never get serviced

Thus: actually generate ACCESS/MODIFY for all the
[vm]spliced/teed-from/to files.

LTP tests are staged in
  https://git.sr.ht/~nabijaczleweli/ltp/commit/v4
("inotify13: new test for fs/splice.c functions vs pipes vs inotify"),
validating that one A and/or one M event per [vm]splice(), tee(),
and sendfile() is generated ‒
without this patchset, this only holds for sendfile().

Amir has identified a potential performance impact caused by
correctly generating events, and has prepared patches at
  https://github.com/amir73il/linux/commits/fsnotify_pipe
that optimise the most common cases more aggressively.

Please review, and please consider taking these through the vfs
tree for 6.6.

Thanks,
Ahelenia Ziemiańska (3):
  splice: always fsnotify_access(in), fsnotify_modify(out) on success
  splice: fsnotify_access(fd)/fsnotify_modify(fd) in vmsplice
  splice: fsnotify_access(in), fsnotify_modify(out) on success in tee

 fs/splice.c | 43 +++++++++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 18 deletions(-)

Comments

Christian Brauner July 3, 2023, 3:44 p.m. UTC | #1
On Mon, 03 Jul 2023 16:42:05 +0200, Ahelenia Ziemiańska wrote:
> Previously: https://lore.kernel.org/linux-fsdevel/jbyihkyk5dtaohdwjyivambb2gffyjs3dodpofafnkkunxq7bu@jngkdxx65pux/t/#u
> 
> In short:
>   * most read/write APIs generate ACCESS/MODIFY for the read/written file(s)
>   * except the [vm]splice/tee family
>     (actually, since 6.4, splice itself /does/ generate events but only
>      for the non-pipes being spliced from/to; this commit is Fixes:ed)
>   * userspace that registers (i|fa)notify on pipes usually relies on it
>     actually working (coreutils tail -f is the primo example)
>   * it's sub-optimal when someone with a magic syscall can fill up a
>     pipe simultaneously ensuring it will never get serviced
> 
> [...]

Fixed the missing single-line-{} after multi-line-{} style problem that
Amir mentioned.

---

Applied to the vfs.misc branch of the vfs/vfs.git tree.
Patches in the vfs.misc branch should appear in linux-next soon.

Please report any outstanding bugs that were missed during review in a
new review to the original patch series allowing us to drop it.

It's encouraged to provide Acked-bys and Reviewed-bys even though the
patch has now been applied. If possible patch trailers will be updated.

Note that commit hashes shown below are subject to change due to rebase,
trailer updates or similar. If in doubt, please check the listed branch.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
branch: vfs.misc

[1/3] splice: always fsnotify_access(in), fsnotify_modify(out) on success
      https://git.kernel.org/vfs/vfs/c/cade9d70ce70
[2/3] splice: fsnotify_access(fd)/fsnotify_modify(fd) in vmsplice
      https://git.kernel.org/vfs/vfs/c/6aa55b7b85b5
[3/3] splice: fsnotify_access(in), fsnotify_modify(out) on success in tee
      https://git.kernel.org/vfs/vfs/c/6e7556086b19