9p/trans_virtio: discard zero-length reply

"Linux Kernel Mailing List" <[email protected]> Fri, 16 Feb 2018 17:08:31 +0000 (UTC)
Newsgroups gmane.linux.kernel.commits.head
Message-ID <[email protected]>
Web:        https://git.kernel.org/torvalds/c/26d99834f89e76514076d9cd06f61e56e6a509b8
Commit:     26d99834f89e76514076d9cd06f61e56e6a509b8
Parent:     d25cc43c6775bff6b8e3dad97c747954b805e421
Refname:    refs/heads/master
Author:     Greg Kurz <[email protected]>
AuthorDate: Mon Jan 22 22:02:05 2018 +0100
Committer:  Michael S. Tsirkin <[email protected]>
CommitDate: Fri Feb 9 20:08:19 2018 +0200

    9p/trans_virtio: discard zero-length reply
    
    When a 9p request is successfully flushed, the server is expected to just
    mark it as used without sending a 9p reply (ie, without writing data into
    the buffer). In this case, virtqueue_get_buf() will return len == 0 and
    we must not report a REQ_STATUS_RCVD status to the client, otherwise the
    client will erroneously assume the request has not been flushed.
    
    Cc: [email protected]
    Signed-off-by: Greg Kurz <[email protected]>
    Signed-off-by: Michael S. Tsirkin <[email protected]>
---
 net/9p/trans_virtio.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
index f3a4efcf1456..3aa5a93ad107 100644
--- a/net/9p/trans_virtio.c
+++ b/net/9p/trans_virtio.c
@@ -160,7 +160,8 @@ static void req_done(struct virtqueue *vq)
 		spin_unlock_irqrestore(&chan->lock, flags);
 		/* Wakeup if anyone waiting for VirtIO ring space. */
 		wake_up(chan->vc_wq);
-		p9_client_cb(chan->client, req, REQ_STATUS_RCVD);
+		if (len)
+			p9_client_cb(chan->client, req, REQ_STATUS_RCVD);
 	}
 }
 
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html