MCPcopy Create free account
hub / github.com/axboe/liburing / test

Function test

test/ringbuf-read.c:38–131  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

36}
37
38static int test(const char *filename, int dio, int async)
39{
40 struct io_uring_sqe *sqe;
41 struct io_uring_cqe *cqe;
42 struct io_uring ring;
43 struct io_uring_buf_ring *br;
44 int ret, fd, i;
45 char *buf;
46 void *ptr;
47
48 ret = io_uring_queue_init(NR_BUFS, &ring, 0);
49 if (ret) {
50 fprintf(stderr, "ring setup failed: %d\n", ret);
51 return 1;
52 }
53
54 if (dio) {
55 fd = open(filename, O_DIRECT | O_RDONLY);
56 if (fd < 0 && errno == EINVAL)
57 return T_EXIT_SKIP;
58 } else {
59 fd = open(filename, O_RDONLY);
60 }
61 if (fd < 0) {
62 if (errno == EPERM || errno == EACCES)
63 return T_EXIT_SKIP;
64 perror("open");
65 return 1;
66 }
67
68 posix_fadvise(fd, 0, FSIZE, POSIX_FADV_DONTNEED);
69
70 if (posix_memalign((void **) &buf, 4096, FSIZE))
71 return 1;
72
73 br = io_uring_setup_buf_ring(&ring, NR_BUFS, 1, 0, &ret);
74 if (!br) {
75 if (ret == -EINVAL) {
76 no_buf_ring = 1;
77 return 0;
78 }
79 fprintf(stderr, "Buffer ring register failed %d\n", ret);
80 return 1;
81 }
82
83 ptr = buf;
84 for (i = 0; i < NR_BUFS; i++) {
85 io_uring_buf_ring_add(br, ptr, BUF_SIZE, i + 1, BR_MASK, i);
86 ptr += BUF_SIZE;
87 }
88 io_uring_buf_ring_advance(br, NR_BUFS);
89
90 for (i = 0; i < NR_BUFS / 2; i++) {
91 sqe = io_uring_get_sqe(&ring);
92 io_uring_prep_read(sqe, fd, NULL, BUF_SIZE, i * BUF_SIZE);
93 sqe->buf_group = 1;
94 sqe->flags |= IOSQE_BUFFER_SELECT;
95 if (async && !(i & 1))

Callers 1

mainFunction · 0.70

Calls 5

io_uring_queue_initFunction · 0.85
io_uring_setup_buf_ringFunction · 0.85
io_uring_submitFunction · 0.85
verify_bufferFunction · 0.85
io_uring_get_sqeFunction · 0.50

Tested by

no test coverage detected