On Wed, May 04, 2016 at 02:21:53PM +0100, Ian Campbell wrote:
> The peer may be expecting a reply having sent a request and then done a
> shutdown(SHUT_WR), so tearing down the whole socket at this point seems
> wrong and breaks for me with a client which does a SHUT_WR.
> 
> Looking at other socket family's stream_recvmsg callbacks doing a shutdown
> here does not seem to be the norm and removing it does not seem to have
> had any adverse effects that I can see.

Seems fine to me.

> I'm using Stefan's RFC virtio transport patches, I'm unsure of the impact
> on the vmci transport.
> 
> Signed-off-by: Ian Campbell <[email protected]>
> Cc: "David S. Miller" <[email protected]>
> Cc: Stefan Hajnoczi <[email protected]>
> Cc: Claudio Imbrenda <[email protected]>
> Cc: Andy King <[email protected]>
> Cc: Dmitry Torokhov <[email protected]>
> Cc: Jorgen Hansen <[email protected]>
> Cc: Adit Ranadive <[email protected]>
> Cc: [email protected]
> ---
>  net/vmw_vsock/af_vsock.c | 21 +--------------------
>  1 file changed, 1 insertion(+), 20 deletions(-)
> 
> diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
> index 1e5f5ed..7a25150 100644
> --- a/net/vmw_vsock/af_vsock.c
> +++ b/net/vmw_vsock/af_vsock.c
> @@ -1789,27 +1789,8 @@ vsock_stream_recvmsg(struct socket *sock, struct 
> msghdr *msg, size_t len,
>       else if (sk->sk_shutdown & RCV_SHUTDOWN)
>               err = 0;
>  
> -     if (copied > 0) {
> -             /* We only do these additional bookkeeping/notification steps
> -              * if we actually copied something out of the queue pair
> -              * instead of just peeking ahead.
> -              */
> -
> -             if (!(flags & MSG_PEEK)) {
> -                     /* If the other side has shutdown for sending and there
> -                      * is nothing more to read, then modify the socket
> -                      * state.
> -                      */
> -                     if (vsk->peer_shutdown & SEND_SHUTDOWN) {
> -                             if (vsock_stream_has_data(vsk) <= 0) {
> -                                     sk->sk_state = SS_UNCONNECTED;
> -                                     sock_set_flag(sk, SOCK_DONE);
> -                                     sk->sk_state_change(sk);
> -                             }
> -                     }
> -             }
> +     if (copied > 0)
>               err = copied;
> -     }
>  
>  out:
>       release_sock(sk);
> -- 
> 2.8.1
> 

Attachment: signature.asc
Description: PGP signature

Reply via email to