mirror of
https://github.com/ziglang/zig.git
synced 2026-01-04 12:33:19 +00:00
Test IORING_REGISTER_FILES but avoid sparse fd sets
This commit is contained in:
parent
5df0d284d0
commit
b2a54b9581
@ -741,9 +741,22 @@ test "queue_readv" {
|
||||
const fd = try os.openZ("/dev/zero", os.O_RDONLY | os.O_CLOEXEC, 0);
|
||||
defer os.close(fd);
|
||||
|
||||
// Linux Kernel 5.4 supports IORING_REGISTER_FILES but not sparse fd sets (i.e. an fd of -1).
|
||||
// Linux Kernel 5.5 adds support for sparse fd sets.
|
||||
// Compare:
|
||||
// https://github.com/torvalds/linux/blob/v5.4/fs/io_uring.c#L3119-L3124 vs
|
||||
// https://github.com/torvalds/linux/blob/v5.8/fs/io_uring.c#L6687-L6691
|
||||
// We therefore avoid stressing sparse fd sets here:
|
||||
var registered_fds = [_]i32{0} ** 1;
|
||||
const fd_index = 0;
|
||||
registered_fds[fd_index] = fd;
|
||||
try ring.register_files(registered_fds[0..]);
|
||||
|
||||
var buffer = [_]u8{42} ** 128;
|
||||
var iovecs = [_]os.iovec{ os.iovec { .iov_base = &buffer, .iov_len = buffer.len } };
|
||||
var sqe = try ring.queue_readv(0xcccccccc, fd, iovecs[0..], 0);
|
||||
var sqe = try ring.queue_readv(0xcccccccc, fd_index, iovecs[0..], 0);
|
||||
ring.use_registered_fd(sqe);
|
||||
testing.expectEqual(@as(u8, linux.IOSQE_FIXED_FILE), sqe.flags);
|
||||
|
||||
testing.expectError(error.IO_UringSubmissionQueueFull, ring.queue_nop(0));
|
||||
testing.expectEqual(@as(u32, 1), try ring.submit());
|
||||
@ -753,6 +766,8 @@ test "queue_readv" {
|
||||
.flags = 0,
|
||||
}, try ring.copy_cqe());
|
||||
testing.expectEqualSlices(u8, &([_]u8{0} ** buffer.len), buffer[0..]);
|
||||
|
||||
try ring.unregister_files();
|
||||
}
|
||||
|
||||
test "queue_writev/queue_fsync" {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user