Test IORING_REGISTER_FILES but avoid sparse fd sets

This commit is contained in:
Joran Dirk Greef 2020-09-19 15:07:10 +02:00
parent 5df0d284d0
commit b2a54b9581

View File

@ -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" {