Jason A. Donenfeld 36ba389960 fs: check FMODE_LSEEK to control internal pipe splicing
[ Upstream commit 97ef77c52b789ec1411d360ed99dca1efe4b2c81 ]

The original direct splicing mechanism from Jens required the input to
be a regular file because it was avoiding the special socket case. It
also recognized blkdevs as being close enough to a regular file. But it
forgot about chardevs, which behave the same way and work fine here.

This is an okayish heuristic, but it doesn't totally work. For example,
a few chardevs should be spliceable here. And a few regular files
shouldn't. This patch fixes this by instead checking whether FMODE_LSEEK
is set, which represents decently enough what we need rewinding for when
splicing to internal pipes.

Fixes: b92ce5589374 ("[PATCH] splice: add direct fd <-> fd splicing support")
Cc: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-08-21 15:15:47 +02:00
..
2022-06-29 08:59:49 +02:00
2020-10-16 11:11:22 -07:00
2021-09-18 13:40:15 +02:00
2022-08-21 15:15:25 +02:00
2020-09-10 14:03:31 -07:00
2022-08-21 15:15:21 +02:00
2022-06-09 10:21:16 +02:00
2021-11-26 10:39:22 +01:00
2020-10-23 11:33:41 -07:00
2020-10-23 11:33:41 -07:00
2021-12-14 11:32:40 +01:00