[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 6/7] virtiofsd: Check EOF before short read
From: |
Vivek Goyal |
Subject: |
[PATCH v2 6/7] virtiofsd: Check EOF before short read |
Date: |
Tue, 18 May 2021 17:35:37 -0400 |
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>
---
tools/virtiofsd/fuse_virtio.c | 21 ++++++++++-----------
1 file 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 */
--
2.25.4
- [PATCH v2 0/7] virtiofsd: Few cleanups in virtio_send_data_iov(), Vivek Goyal, 2021/05/18
- [PATCH v2 4/7] virtiofsd: get rid of in_sg_left variable, Vivek Goyal, 2021/05/18
- [PATCH v2 6/7] virtiofsd: Check EOF before short read,
Vivek Goyal <=
- [PATCH v2 2/7] virtiofsd: Get rid of unreachable code in read, Vivek Goyal, 2021/05/18
- [PATCH v2 7/7] virtiofsd: Set req->reply_sent right after sending reply, Vivek Goyal, 2021/05/18
- [PATCH v2 3/7] virtiofsd: Use iov_discard_front() to skip bytes, Vivek Goyal, 2021/05/18
- [PATCH v2 1/7] virtiofsd: Check for EINTR in preadv() and retry, Vivek Goyal, 2021/05/18
- [PATCH v2 5/7] virtiofsd: Simplify skip byte logic, Vivek Goyal, 2021/05/18
- Re: [PATCH v2 0/7] virtiofsd: Few cleanups in virtio_send_data_iov(), Dr. David Alan Gilbert, 2021/05/25