Message ID | 20221108095347.3830634-1-dylany@meta.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [liburing,v2] test that unregister_files processes task work | expand |
On 11/8/22 4:53 PM, Dylan Yudaken wrote: > + ret = io_uring_register_files(&ring, &fds[0], 2); > + > + sqe = io_uring_get_sqe(&ring); > + io_uring_prep_read(sqe, 0, &buff, 1, 0); > + sqe->flags |= IOSQE_FIXED_FILE; > + ret = io_uring_submit(&ring); > + if (ret != 1) { > + fprintf(stderr, "bad submit\n"); > + return 1; > + } This assignment is meaningless: ret = io_uring_register_files(). It's overwritten by ret = io_uring_submit() anyway. I suppose we should have an error handler right after register_files().
On Tue, 2022-11-08 at 17:03 +0700, Ammar Faizi wrote: > On 11/8/22 4:53 PM, Dylan Yudaken wrote: > > + ret = io_uring_register_files(&ring, &fds[0], 2); > > + > > + sqe = io_uring_get_sqe(&ring); > > + io_uring_prep_read(sqe, 0, &buff, 1, 0); > > + sqe->flags |= IOSQE_FIXED_FILE; > > + ret = io_uring_submit(&ring); > > + if (ret != 1) { > > + fprintf(stderr, "bad submit\n"); > > + return 1; > > + } > > This assignment is meaningless: > > ret = io_uring_register_files(). > > It's overwritten by ret = io_uring_submit() anyway. I suppose we > should have an error handler right after register_files(). > right - not my best test case :) I'll add an error handler
diff --git a/test/file-register.c b/test/file-register.c index 634ef8159cec..975f89d5a94b 100644 --- a/test/file-register.c +++ b/test/file-register.c @@ -935,6 +935,55 @@ static int test_zero_range_alloc(struct io_uring *ring, int fds[2]) return 0; } +static int test_defer_taskrun(void) +{ + struct io_uring_sqe *sqe; + struct io_uring ring; + int ret, fds[2]; + char buff = 'x'; + + ret = io_uring_queue_init(8, &ring, + IORING_SETUP_DEFER_TASKRUN | IORING_SETUP_SINGLE_ISSUER); + if (ret) { + fprintf(stderr, "ring init\n"); + return 1; + } + + ret = pipe(fds); + if (ret) { + fprintf(stderr, "bad pipes\n"); + return 1; + } + + ret = io_uring_register_files(&ring, &fds[0], 2); + + sqe = io_uring_get_sqe(&ring); + io_uring_prep_read(sqe, 0, &buff, 1, 0); + sqe->flags |= IOSQE_FIXED_FILE; + ret = io_uring_submit(&ring); + if (ret != 1) { + fprintf(stderr, "bad submit\n"); + return 1; + } + + ret = write(fds[1], &buff, 1); + if (ret != 1) { + fprintf(stderr, "bad pipe write\n"); + return 1; + } + + ret = io_uring_unregister_files(&ring); + if (ret) { + fprintf(stderr, "bad unregister %d\n", ret); + return 1; + } + + close(fds[0]); + close(fds[1]); + io_uring_queue_exit(&ring); + return 0; +} + static int test_file_alloc_ranges(void) { struct io_uring ring; @@ -1120,5 +1169,13 @@ int main(int argc, char *argv[]) return T_EXIT_FAIL; } + if (t_probe_defer_taskrun()) { + ret = test_defer_taskrun(); + if (ret) { + fprintf(stderr, "test_defer_taskrun failed\n"); + return T_EXIT_FAIL; + } + } + return T_EXIT_PASS; }
Ensure that unregister_files processes task work from defer_taskrun even when not explicitly flushed. Signed-off-by: Dylan Yudaken <dylany@meta.com> --- v2: - fix return code when ring init fails test/file-register.c | 57 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) base-commit: 754bc068ec482c5338a07dd74b7d3892729bb847