Message ID | 151665492548.14372.18325892476788349632.stgit@bahia.lan |
---|---|
State | Not Applicable, archived |
Delegated to: | David Miller |
Headers | show |
Series | 9p/trans_virtio: discard zero-length reply | expand |
Ping ? Michael, Since this is virtio code and you have acked the QEMU part of the fix already, would you be kind enough to take this through your tree ? Cheers, -- Greg On Mon, 22 Jan 2018 22:02:05 +0100 Greg Kurz <groug@kaod.org> wrote: > 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. > > Signed-off-by: Greg Kurz <groug@kaod.org> > --- > 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 0845aad4ba51..ca08c72ef4de 100644 > --- a/net/9p/trans_virtio.c > +++ b/net/9p/trans_virtio.c > @@ -171,7 +171,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); > } > } > > > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > V9fs-developer mailing list > V9fs-developer@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/v9fs-developer
OK, I've queued it. On Thu, Feb 08, 2018 at 06:52:32PM +0100, Greg Kurz wrote: > Ping ? > > Michael, > > Since this is virtio code and you have acked the QEMU part of the fix already, > would you be kind enough to take this through your tree ? > > Cheers, > > -- > Greg > > On Mon, 22 Jan 2018 22:02:05 +0100 > Greg Kurz <groug@kaod.org> wrote: > > > 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. > > > > Signed-off-by: Greg Kurz <groug@kaod.org> > > --- > > 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 0845aad4ba51..ca08c72ef4de 100644 > > --- a/net/9p/trans_virtio.c > > +++ b/net/9p/trans_virtio.c > > @@ -171,7 +171,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); > > } > > } > > > > > > > > ------------------------------------------------------------------------------ > > Check out the vibrant tech community on one of the world's most > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > > _______________________________________________ > > V9fs-developer mailing list > > V9fs-developer@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/v9fs-developer
diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c index 0845aad4ba51..ca08c72ef4de 100644 --- a/net/9p/trans_virtio.c +++ b/net/9p/trans_virtio.c @@ -171,7 +171,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); } }
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. Signed-off-by: Greg Kurz <groug@kaod.org> --- net/9p/trans_virtio.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)