| ... | ... | @@ -741,9 +741,22 @@ test "queue_readv" { |
| 741 | 741 | const fd = try os.openZ("/dev/zero", os.O_RDONLY | os.O_CLOEXEC, 0); |
| 742 | 742 | defer os.close(fd); |
| 743 | 743 | |
| 744 | // Linux Kernel 5.4 supports IORING_REGISTER_FILES but not sparse fd sets (i.e. an fd of -1). |
| 745 | // Linux Kernel 5.5 adds support for sparse fd sets. |
| 746 | // Compare: |
| 747 | // https://github.com/torvalds/linux/blob/v5.4/fs/io_uring.c#L3119-L3124 vs |
| 748 | // https://github.com/torvalds/linux/blob/v5.8/fs/io_uring.c#L6687-L6691 |
| 749 | // We therefore avoid stressing sparse fd sets here: |
| 750 | var registered_fds = [_]i32{0} ** 1; |
| 751 | const fd_index = 0; |
| 752 | registered_fds[fd_index] = fd; |
| 753 | try ring.register_files(registered_fds[0..]); |
| 754 | |
| 744 | 755 | var buffer = [_]u8{42} ** 128; |
| 745 | 756 | var iovecs = [_]os.iovec{ os.iovec { .iov_base = &buffer, .iov_len = buffer.len } }; |
| 746 | | var sqe = try ring.queue_readv(0xcccccccc, fd, iovecs[0..], 0); |
| 757 | var sqe = try ring.queue_readv(0xcccccccc, fd_index, iovecs[0..], 0); |
| 758 | ring.use_registered_fd(sqe); |
| 759 | testing.expectEqual(@as(u8, linux.IOSQE_FIXED_FILE), sqe.flags); |
| 747 | 760 | |
| 748 | 761 | testing.expectError(error.IO_UringSubmissionQueueFull, ring.queue_nop(0)); |
| 749 | 762 | testing.expectEqual(@as(u32, 1), try ring.submit()); |
| ... | ... | @@ -753,6 +766,8 @@ test "queue_readv" { |
| 753 | 766 | .flags = 0, |
| 754 | 767 | }, try ring.copy_cqe()); |
| 755 | 768 | testing.expectEqualSlices(u8, &([_]u8{0} ** buffer.len), buffer[0..]); |
| 769 | |
| 770 | try ring.unregister_files(); |
| 756 | 771 | } |
| 757 | 772 | |
| 758 | 773 | test "queue_writev/queue_fsync" { |