Messages in this thread Patch in this message | | | From | "Jason A. Donenfeld" <> | Subject | [PATCH RESEND for-al-viro] splice: allow direct splicing with chardevs | Date | Fri, 24 Jun 2022 14:48:52 +0200 |
| |
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 commit adds the missing S_ISCHR condition so that chardevs such as /dev/urandom can be directly spliced without strangely returning -EINVAL.
Fixes: b92ce5589374 ("[PATCH] splice: add direct fd <-> fd splicing support") Reviewed-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> --- Resending this with Jens' reviewed-by attached (he wrote the original code this patch modifies). The prior submission seems to have been buried/forgotten. This is presumably for Al's tree, though if somebody else wants to take it, I'd be happy to get it in anywhere. The prior forgotten thread is here for reference: https://lore.kernel.org/lkml/20220520095747.123748-1-Jason@zx2c4.com/T/#u
fs/splice.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/fs/splice.c b/fs/splice.c index 047b79db8eb5..7e673b1786fb 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -824,7 +824,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, * piped splicing for that! */ i_mode = file_inode(in)->i_mode; - if (unlikely(!S_ISREG(i_mode) && !S_ISBLK(i_mode))) + if (unlikely(!S_ISREG(i_mode) && !S_ISBLK(i_mode) && !S_ISCHR(i_mode))) return -EINVAL; /* -- 2.35.1
| |