Inter-revision diff: patch 1

Comparing v8 (message) to v3 (message)

--- v8
+++ v3
@@ -1,16 +1,19 @@
-This prepares af_vsock.c for SEQPACKET support: some functions such
-as setsockopt(), getsockopt(), connect(), recvmsg(), sendmsg() are
-shared between both types of sockets, so rename them in general
-manner.
+This prepares af_vsock.c for SEQPACKET support:
+1) As both stream and seqpacket sockets are connection oriented, add
+   check for SOCK_SEQPACKET to conditions where SOCK_STREAM is checked.
+2) Some functions such as setsockopt(), getsockopt(), connect(),
+   recvmsg(), sendmsg() are shared between both types of sockets, so
+   rename them in general manner and create entry points for each type
+   of socket to call these functions(for stream in this patch, for
+   seqpacket in further patches).
 
 Signed-off-by: Arseny Krasnov <arseny.krasnov@kaspersky.com>
-Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
 ---
- net/vmw_vsock/af_vsock.c | 64 +++++++++++++++++++++-------------------
- 1 file changed, 34 insertions(+), 30 deletions(-)
+ net/vmw_vsock/af_vsock.c | 91 +++++++++++++++++++++++++++++-----------
+ 1 file changed, 67 insertions(+), 24 deletions(-)
 
 diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
-index bc7fb9bf3351..35fcab370885 100644
+index b12d3a322242..c9ce57db9554 100644
 --- a/net/vmw_vsock/af_vsock.c
 +++ b/net/vmw_vsock/af_vsock.c
 @@ -604,8 +604,8 @@ static void vsock_pending_work(struct work_struct *work)
@@ -33,19 +36,19 @@
  		spin_unlock_bh(&vsock_table_lock);
  		break;
  
-@@ -768,6 +768,11 @@ static struct sock *__vsock_create(struct net *net,
+@@ -767,6 +767,11 @@ static struct sock *__vsock_create(struct net *net,
  	return sk;
  }
  
 +static bool sock_type_connectible(u16 type)
 +{
-+	return type == SOCK_STREAM;
++	return (type == SOCK_STREAM || type == SOCK_SEQPACKET);
 +}
 +
  static void __vsock_release(struct sock *sk, int level)
  {
  	if (sk) {
-@@ -786,7 +791,7 @@ static void __vsock_release(struct sock *sk, int level)
+@@ -785,7 +790,7 @@ static void __vsock_release(struct sock *sk, int level)
  
  		if (vsk->transport)
  			vsk->transport->release(vsk);
@@ -54,34 +57,34 @@
  			vsock_remove_sock(vsk);
  
  		sock_orphan(sk);
-@@ -948,7 +953,7 @@ static int vsock_shutdown(struct socket *sock, int mode)
- 	lock_sock(sk);
+@@ -945,7 +950,7 @@ static int vsock_shutdown(struct socket *sock, int mode)
+ 	sk = sock->sk;
  	if (sock->state == SS_UNCONNECTED) {
  		err = -ENOTCONN;
 -		if (sk->sk_type == SOCK_STREAM)
 +		if (sock_type_connectible(sk->sk_type))
- 			goto out;
+ 			return err;
  	} else {
  		sock->state = SS_DISCONNECTING;
-@@ -961,7 +966,7 @@ static int vsock_shutdown(struct socket *sock, int mode)
- 		sk->sk_shutdown |= mode;
+@@ -960,7 +965,7 @@ static int vsock_shutdown(struct socket *sock, int mode)
  		sk->sk_state_change(sk);
+ 		release_sock(sk);
  
 -		if (sk->sk_type == SOCK_STREAM) {
 +		if (sock_type_connectible(sk->sk_type)) {
  			sock_reset_flag(sk, SOCK_DONE);
  			vsock_send_shutdown(sk, mode);
  		}
-@@ -1016,7 +1021,7 @@ static __poll_t vsock_poll(struct file *file, struct socket *sock,
+@@ -1013,7 +1018,7 @@ static __poll_t vsock_poll(struct file *file, struct socket *sock,
  		if (!(sk->sk_shutdown & SEND_SHUTDOWN))
  			mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
  
 -	} else if (sock->type == SOCK_STREAM) {
 +	} else if (sock_type_connectible(sk->sk_type)) {
- 		const struct vsock_transport *transport;
- 
+ 		const struct vsock_transport *transport = vsk->transport;
  		lock_sock(sk);
-@@ -1263,8 +1268,8 @@ static void vsock_connect_timeout(struct work_struct *work)
+ 
+@@ -1259,8 +1264,8 @@ static void vsock_connect_timeout(struct work_struct *work)
  	sock_put(sk);
  }
  
@@ -92,7 +95,20 @@
  {
  	int err;
  	struct sock *sk;
-@@ -1414,7 +1419,7 @@ static int vsock_accept(struct socket *sock, struct socket *newsock, int flags,
+@@ -1395,6 +1400,12 @@ static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
+ 	return err;
+ }
+ 
++static int vsock_stream_connect(struct socket *sock, struct sockaddr *addr,
++				int addr_len, int flags)
++{
++	return vsock_connect(sock, addr, addr_len, flags);
++}
++
+ static int vsock_accept(struct socket *sock, struct socket *newsock, int flags,
+ 			bool kern)
+ {
+@@ -1410,7 +1421,7 @@ static int vsock_accept(struct socket *sock, struct socket *newsock, int flags,
  
  	lock_sock(listener);
  
@@ -101,7 +117,7 @@
  		err = -EOPNOTSUPP;
  		goto out;
  	}
-@@ -1491,7 +1496,7 @@ static int vsock_listen(struct socket *sock, int backlog)
+@@ -1487,7 +1498,7 @@ static int vsock_listen(struct socket *sock, int backlog)
  
  	lock_sock(sk);
  
@@ -110,7 +126,7 @@
  		err = -EOPNOTSUPP;
  		goto out;
  	}
-@@ -1535,11 +1540,11 @@ static void vsock_update_buffer_size(struct vsock_sock *vsk,
+@@ -1531,11 +1542,11 @@ static void vsock_update_buffer_size(struct vsock_sock *vsk,
  	vsk->buffer_size = val;
  }
  
@@ -127,7 +143,7 @@
  {
  	int err;
  	struct sock *sk;
-@@ -1617,10 +1622,10 @@ static int vsock_stream_setsockopt(struct socket *sock,
+@@ -1612,10 +1623,20 @@ static int vsock_stream_setsockopt(struct socket *sock,
  	return err;
  }
  
@@ -135,6 +151,16 @@
 -				   int level, int optname,
 -				   char __user *optval,
 -				   int __user *optlen)
++static int vsock_stream_setsockopt(struct socket *sock,
++				   int level,
++				   int optname,
++				   sockptr_t optval,
++				   unsigned int optlen)
++{
++	return vsock_connectible_setsockopt(sock, level, optname, optval,
++					    optlen);
++}
++
 +static int vsock_connectible_getsockopt(struct socket *sock,
 +					int level, int optname,
 +					char __user *optval,
@@ -142,22 +168,37 @@
  {
  	int err;
  	int len;
-@@ -1688,8 +1693,8 @@ static int vsock_stream_getsockopt(struct socket *sock,
+@@ -1683,8 +1704,17 @@ static int vsock_stream_getsockopt(struct socket *sock,
  	return 0;
  }
  
 -static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
 -				size_t len)
++static int vsock_stream_getsockopt(struct socket *sock,
++				   int level, int optname,
++				   char __user *optval,
++				   int __user *optlen)
++{
++	return vsock_connectible_getsockopt(sock, level, optname, optval,
++					    optlen);
++}
++
 +static int vsock_connectible_sendmsg(struct socket *sock, struct msghdr *msg,
 +				     size_t len)
  {
  	struct sock *sk;
  	struct vsock_sock *vsk;
-@@ -1828,10 +1833,9 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
- 	return err;
- }
- 
--
+@@ -1822,10 +1852,16 @@ static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
+ 	return err;
+ }
+ 
++static int vsock_stream_sendmsg(struct socket *sock, struct msghdr *msg,
++				size_t len)
++{
++	return vsock_connectible_sendmsg(sock, msg, len);
++}
++
+ 
  static int
 -vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
 -		     int flags)
@@ -166,30 +207,20 @@
  {
  	struct sock *sk;
  	struct vsock_sock *vsk;
-@@ -2007,7 +2011,7 @@ static const struct proto_ops vsock_stream_ops = {
+@@ -1995,6 +2031,13 @@ vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
+ 	return err;
+ }
+ 
++static int
++vsock_stream_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
++		     int flags)
++{
++	return vsock_connectible_recvmsg(sock, msg, len, flags);
++}
++
+ static const struct proto_ops vsock_stream_ops = {
+ 	.family = PF_VSOCK,
  	.owner = THIS_MODULE,
- 	.release = vsock_release,
- 	.bind = vsock_bind,
--	.connect = vsock_stream_connect,
-+	.connect = vsock_connect,
- 	.socketpair = sock_no_socketpair,
- 	.accept = vsock_accept,
- 	.getname = vsock_getname,
-@@ -2015,10 +2019,10 @@ static const struct proto_ops vsock_stream_ops = {
- 	.ioctl = sock_no_ioctl,
- 	.listen = vsock_listen,
- 	.shutdown = vsock_shutdown,
--	.setsockopt = vsock_stream_setsockopt,
--	.getsockopt = vsock_stream_getsockopt,
--	.sendmsg = vsock_stream_sendmsg,
--	.recvmsg = vsock_stream_recvmsg,
-+	.setsockopt = vsock_connectible_setsockopt,
-+	.getsockopt = vsock_connectible_getsockopt,
-+	.sendmsg = vsock_connectible_sendmsg,
-+	.recvmsg = vsock_connectible_recvmsg,
- 	.mmap = sock_no_mmap,
- 	.sendpage = sock_no_sendpage,
- };
 -- 
 2.25.1
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help