Revert "fs: check FMODE_LSEEK to control internal pipe splicing"
authorSasha Levin <sashal@kernel.org>
Sat, 15 Oct 2022 11:18:38 +0000 (07:18 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 26 Oct 2022 11:16:56 +0000 (13:16 +0200)
This reverts commit fd0a6e99b61e6c08fa5cf585d54fd956f70c73a6.

Which was upstream commit 97ef77c52b789ec1411d360ed99dca1efe4b2c81.

The commit is missing dependencies and breaks NFS tests, remove it for
now.

Reported-by: Saeed Mirzamohammadi <saeed.mirzamohammadi@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/splice.c

index 04d25af25a42cc043c4d860f2d7ec8984bb92072..c84ac7e97e215b4eb0985edebc8d2c87c3a8e0a7 100644 (file)
@@ -898,15 +898,17 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
 {
        struct pipe_inode_info *pipe;
        long ret, bytes;
+       umode_t i_mode;
        size_t len;
        int i, flags, more;
 
        /*
-        * We require the input to be seekable, as we don't want to randomly
-        * drop data for eg socket -> socket splicing. Use the piped splicing
-        * for that!
+        * We require the input being a regular file, as we don't want to
+        * randomly drop data for eg socket -> socket splicing. Use the
+        * piped splicing for that!
         */
-       if (unlikely(!(in->f_mode & FMODE_LSEEK)))
+       i_mode = file_inode(in)->i_mode;
+       if (unlikely(!S_ISREG(i_mode) && !S_ISBLK(i_mode)))
                return -EINVAL;
 
        /*