diff mbox series

socket: do a generic_file_splice_read when proto_ops has no splice_read

Message ID 20181116092753.18763-1-kaslevs@vmware.com
State Accepted, archived
Delegated to: David Miller
Headers show
Series socket: do a generic_file_splice_read when proto_ops has no splice_read | expand

Commit Message

kaslevs@vmware.com Nov. 16, 2018, 9:27 a.m. UTC
From: Slavomir Kaslev <kaslevs@vmware.com>

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>
---
 net/socket.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

David Miller Nov. 18, 2018, 5:34 a.m. UTC | #1
From: kaslevs@vmware.com
Date: Fri, 16 Nov 2018 11:27:53 +0200

> From: Slavomir Kaslev <kaslevs@vmware.com>
> 
> 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>

Applied.

I wonder why we left things this way for so long.
diff mbox series

Patch

diff --git a/net/socket.c b/net/socket.c
index 593826e11a53..334fcc617ef2 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -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);
 }