[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 1/6] file-posix: Fix EINTR handling
From: |
Fam Zheng |
Subject: |
[Qemu-block] [PATCH 1/6] file-posix: Fix EINTR handling |
Date: |
Fri, 8 Jun 2018 14:04:12 +0800 |
EINTR should be checked against errno, not ret. While fixing the bug,
collecting the branches with a switch block.
Signed-off-by: Fam Zheng <address@hidden>
---
block/file-posix.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/block/file-posix.c b/block/file-posix.c
index 513d371bb1..c6dae38f94 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -1473,20 +1473,20 @@ static ssize_t handle_aiocb_copy_range(RawPosixAIOData
*aiocb)
ssize_t ret = copy_file_range(aiocb->aio_fildes, &in_off,
aiocb->aio_fd2, &out_off,
bytes, 0);
- if (ret == -EINTR) {
- continue;
- }
- if (ret < 0) {
- if (errno == ENOSYS) {
+ if (ret <= 0) {
+ switch (errno) {
+ case 0:
+ /* No progress (e.g. when beyond EOF), let the caller fall back
+ * to buffer I/O. */
+ /* fall through */
+ case ENOSYS:
return -ENOTSUP;
- } else {
+ case EINTR:
+ continue;
+ default:
return -errno;
}
}
- if (!ret) {
- /* No progress (e.g. when beyond EOF), fall back to buffer I/O. */
- return -ENOTSUP;
- }
bytes -= ret;
}
return 0;
--
2.17.0
- [Qemu-block] [PATCH 0/6] mirror: Use copy offloading, Fam Zheng, 2018/06/08
- [Qemu-block] [PATCH 1/6] file-posix: Fix EINTR handling,
Fam Zheng <=
- [Qemu-block] [PATCH 2/6] block: Check if block drivers can do copy offloading, Fam Zheng, 2018/06/08
- [Qemu-block] [PATCH 3/6] block-backend: Refactor AIO emulation, Fam Zheng, 2018/06/08
- [Qemu-block] [PATCH 4/6] block-backend: Add blk_aio_copy_range, Fam Zheng, 2018/06/08
- [Qemu-block] [PATCH 5/6] block: Add backing passthrough implementations for copy_range, Fam Zheng, 2018/06/08
- [Qemu-block] [PATCH 6/6] mirror: Use copy offloading, Fam Zheng, 2018/06/08