socket: do a generic_file_splice_read when proto_ops has no splice_read
authorSlavomir Kaslev <kaslevs@vmware.com>
Fri, 16 Nov 2018 09:27:53 +0000 (11:27 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sun, 18 Nov 2018 05:34:11 +0000 (21:34 -0800)
splice(2) fails with -EINVAL when called reading on a socket with no splice_read
set in its proto_ops (such as vsock sockets). Switch this to fallbacks to a
generic_file_splice_read instead.

Signed-off-by: Slavomir Kaslev <kaslevs@vmware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/socket.c

index 593826e11a5376bd1301b2cf19c61c377653c653..334fcc617ef2737acd0a84f7921e28a88771756f 100644 (file)
@@ -853,7 +853,7 @@ static ssize_t sock_splice_read(struct file *file, loff_t *ppos,
        struct socket *sock = file->private_data;
 
        if (unlikely(!sock->ops->splice_read))
-               return -EINVAL;
+               return generic_file_splice_read(file, ppos, pipe, len, flags);
 
        return sock->ops->splice_read(sock, ppos, pipe, len, flags);
 }