summaryrefslogtreecommitdiffstats
path: root/tools/virtiofsd/fuse_virtio.c
diff options
context:
space:
mode:
authorVivek Goyal2021-05-18 23:35:37 +0200
committerDr. David Alan Gilbert2021-05-26 19:39:32 +0200
commit1a5fff8e63a5ab55ccdec4f134b2f96453bf789f (patch)
tree03a1d8ec0e423292ae42aeb9cd18ba40e3fd48b3 /tools/virtiofsd/fuse_virtio.c
parentvirtiofsd: Simplify skip byte logic (diff)
downloadqemu-1a5fff8e63a5ab55ccdec4f134b2f96453bf789f.tar.gz
qemu-1a5fff8e63a5ab55ccdec4f134b2f96453bf789f.tar.xz
qemu-1a5fff8e63a5ab55ccdec4f134b2f96453bf789f.zip
virtiofsd: Check EOF before short read
In virtio_send_data_iov() we are checking first for short read and then EOF condition. Change the order. Basically check for error and EOF first and last remaining piece is short ready which will lead to retry automatically at the end of while loop. Just that it is little simpler to read to the code. There is no need to call "continue" and also one less call of "len-=ret". Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Connor Kuehl <ckuehl@redhat.com> Signed-off-by: Vivek Goyal <vgoyal@redhat.com> Message-Id: <20210518213538.693422-7-vgoyal@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Diffstat (limited to 'tools/virtiofsd/fuse_virtio.c')
-rw-r--r--tools/virtiofsd/fuse_virtio.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/tools/virtiofsd/fuse_virtio.c b/tools/virtiofsd/fuse_virtio.c
index 49c7dd788a..99f91c9d87 100644
--- a/tools/virtiofsd/fuse_virtio.c
+++ b/tools/virtiofsd/fuse_virtio.c
@@ -410,25 +410,24 @@ int virtio_send_data_iov(struct fuse_session *se, struct fuse_chan *ch,
__func__, len);
goto err;
}
- fuse_log(FUSE_LOG_DEBUG, "%s: preadv ret=%d len=%zd\n", __func__,
- ret, len);
- if (ret < len && ret) {
- fuse_log(FUSE_LOG_DEBUG, "%s: ret < len\n", __func__);
- /* Skip over this much next time around */
- iov_discard_front(&in_sg_ptr, &in_sg_cpy_count, ret);
- buf->buf[0].pos += ret;
- len -= ret;
- /* Lets do another read */
- continue;
- }
if (!ret) {
/* EOF case? */
fuse_log(FUSE_LOG_DEBUG, "%s: !ret len remaining=%zd\n", __func__,
len);
break;
}
+ fuse_log(FUSE_LOG_DEBUG, "%s: preadv ret=%d len=%zd\n", __func__,
+ ret, len);
+
len -= ret;
+ /* Short read. Retry reading remaining bytes */
+ if (len) {
+ fuse_log(FUSE_LOG_DEBUG, "%s: ret < len\n", __func__);
+ /* Skip over this much next time around */
+ iov_discard_front(&in_sg_ptr, &in_sg_cpy_count, ret);
+ buf->buf[0].pos += ret;
+ }
} while (len);
/* Need to fix out->len on EOF */