@nxtedition/rocksdb 7.0.2 → 7.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/deps/liburing/liburing/README +46 -0
  2. package/deps/liburing/liburing/test/232c93d07b74-test.c +305 -0
  3. package/deps/liburing/liburing/test/35fa71a030ca-test.c +329 -0
  4. package/deps/liburing/liburing/test/500f9fbadef8-test.c +89 -0
  5. package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +93 -0
  6. package/deps/liburing/liburing/test/8a9973408177-test.c +106 -0
  7. package/deps/liburing/liburing/test/917257daa0fe-test.c +53 -0
  8. package/deps/liburing/liburing/test/Makefile +312 -0
  9. package/deps/liburing/liburing/test/a0908ae19763-test.c +58 -0
  10. package/deps/liburing/liburing/test/a4c0b3decb33-test.c +180 -0
  11. package/deps/liburing/liburing/test/accept-link.c +251 -0
  12. package/deps/liburing/liburing/test/accept-reuse.c +164 -0
  13. package/deps/liburing/liburing/test/accept-test.c +79 -0
  14. package/deps/liburing/liburing/test/accept.c +476 -0
  15. package/deps/liburing/liburing/test/across-fork.c +283 -0
  16. package/deps/liburing/liburing/test/b19062a56726-test.c +53 -0
  17. package/deps/liburing/liburing/test/b5837bd5311d-test.c +77 -0
  18. package/deps/liburing/liburing/test/ce593a6c480a-test.c +135 -0
  19. package/deps/liburing/liburing/test/close-opath.c +122 -0
  20. package/deps/liburing/liburing/test/config +10 -0
  21. package/deps/liburing/liburing/test/connect.c +398 -0
  22. package/deps/liburing/liburing/test/cq-full.c +96 -0
  23. package/deps/liburing/liburing/test/cq-overflow.c +294 -0
  24. package/deps/liburing/liburing/test/cq-peek-batch.c +102 -0
  25. package/deps/liburing/liburing/test/cq-ready.c +94 -0
  26. package/deps/liburing/liburing/test/cq-size.c +58 -0
  27. package/deps/liburing/liburing/test/d4ae271dfaae-test.c +96 -0
  28. package/deps/liburing/liburing/test/d77a67ed5f27-test.c +65 -0
  29. package/deps/liburing/liburing/test/defer.c +307 -0
  30. package/deps/liburing/liburing/test/double-poll-crash.c +186 -0
  31. package/deps/liburing/liburing/test/eeed8b54e0df-test.c +114 -0
  32. package/deps/liburing/liburing/test/empty-eownerdead.c +42 -0
  33. package/deps/liburing/liburing/test/eventfd-disable.c +151 -0
  34. package/deps/liburing/liburing/test/eventfd-ring.c +97 -0
  35. package/deps/liburing/liburing/test/eventfd.c +112 -0
  36. package/deps/liburing/liburing/test/fadvise.c +202 -0
  37. package/deps/liburing/liburing/test/fallocate.c +249 -0
  38. package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +138 -0
  39. package/deps/liburing/liburing/test/file-register.c +843 -0
  40. package/deps/liburing/liburing/test/file-update.c +173 -0
  41. package/deps/liburing/liburing/test/files-exit-hang-poll.c +128 -0
  42. package/deps/liburing/liburing/test/files-exit-hang-timeout.c +134 -0
  43. package/deps/liburing/liburing/test/fixed-link.c +90 -0
  44. package/deps/liburing/liburing/test/fsync.c +224 -0
  45. package/deps/liburing/liburing/test/hardlink.c +136 -0
  46. package/deps/liburing/liburing/test/helpers.c +135 -0
  47. package/deps/liburing/liburing/test/helpers.h +67 -0
  48. package/deps/liburing/liburing/test/io-cancel.c +537 -0
  49. package/deps/liburing/liburing/test/io_uring_enter.c +296 -0
  50. package/deps/liburing/liburing/test/io_uring_register.c +664 -0
  51. package/deps/liburing/liburing/test/io_uring_setup.c +192 -0
  52. package/deps/liburing/liburing/test/iopoll.c +366 -0
  53. package/deps/liburing/liburing/test/lfs-openat-write.c +117 -0
  54. package/deps/liburing/liburing/test/lfs-openat.c +273 -0
  55. package/deps/liburing/liburing/test/link-timeout.c +1107 -0
  56. package/deps/liburing/liburing/test/link.c +496 -0
  57. package/deps/liburing/liburing/test/link_drain.c +229 -0
  58. package/deps/liburing/liburing/test/madvise.c +195 -0
  59. package/deps/liburing/liburing/test/mkdir.c +108 -0
  60. package/deps/liburing/liburing/test/multicqes_drain.c +383 -0
  61. package/deps/liburing/liburing/test/nop-all-sizes.c +107 -0
  62. package/deps/liburing/liburing/test/nop.c +115 -0
  63. package/deps/liburing/liburing/test/open-close.c +146 -0
  64. package/deps/liburing/liburing/test/openat2.c +240 -0
  65. package/deps/liburing/liburing/test/personality.c +204 -0
  66. package/deps/liburing/liburing/test/pipe-eof.c +81 -0
  67. package/deps/liburing/liburing/test/pipe-reuse.c +105 -0
  68. package/deps/liburing/liburing/test/poll-cancel-ton.c +139 -0
  69. package/deps/liburing/liburing/test/poll-cancel.c +135 -0
  70. package/deps/liburing/liburing/test/poll-link.c +227 -0
  71. package/deps/liburing/liburing/test/poll-many.c +208 -0
  72. package/deps/liburing/liburing/test/poll-mshot-update.c +273 -0
  73. package/deps/liburing/liburing/test/poll-ring.c +48 -0
  74. package/deps/liburing/liburing/test/poll-v-poll.c +353 -0
  75. package/deps/liburing/liburing/test/poll.c +109 -0
  76. package/deps/liburing/liburing/test/probe.c +137 -0
  77. package/deps/liburing/liburing/test/read-write.c +876 -0
  78. package/deps/liburing/liburing/test/register-restrictions.c +633 -0
  79. package/deps/liburing/liburing/test/rename.c +134 -0
  80. package/deps/liburing/liburing/test/ring-leak.c +173 -0
  81. package/deps/liburing/liburing/test/ring-leak2.c +249 -0
  82. package/deps/liburing/liburing/test/rsrc_tags.c +449 -0
  83. package/deps/liburing/liburing/test/runtests-loop.sh +16 -0
  84. package/deps/liburing/liburing/test/runtests.sh +170 -0
  85. package/deps/liburing/liburing/test/rw_merge_test.c +97 -0
  86. package/deps/liburing/liburing/test/self.c +91 -0
  87. package/deps/liburing/liburing/test/send_recv.c +291 -0
  88. package/deps/liburing/liburing/test/send_recvmsg.c +345 -0
  89. package/deps/liburing/liburing/test/sendmsg_fs_cve.c +198 -0
  90. package/deps/liburing/liburing/test/shared-wq.c +84 -0
  91. package/deps/liburing/liburing/test/short-read.c +75 -0
  92. package/deps/liburing/liburing/test/shutdown.c +163 -0
  93. package/deps/liburing/liburing/test/sigfd-deadlock.c +74 -0
  94. package/deps/liburing/liburing/test/socket-rw-eagain.c +156 -0
  95. package/deps/liburing/liburing/test/socket-rw.c +147 -0
  96. package/deps/liburing/liburing/test/splice.c +511 -0
  97. package/deps/liburing/liburing/test/sq-full-cpp.cc +45 -0
  98. package/deps/liburing/liburing/test/sq-full.c +45 -0
  99. package/deps/liburing/liburing/test/sq-poll-dup.c +200 -0
  100. package/deps/liburing/liburing/test/sq-poll-kthread.c +168 -0
  101. package/deps/liburing/liburing/test/sq-poll-share.c +137 -0
  102. package/deps/liburing/liburing/test/sq-space_left.c +159 -0
  103. package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +159 -0
  104. package/deps/liburing/liburing/test/sqpoll-disable-exit.c +195 -0
  105. package/deps/liburing/liburing/test/sqpoll-exit-hang.c +77 -0
  106. package/deps/liburing/liburing/test/sqpoll-sleep.c +68 -0
  107. package/deps/liburing/liburing/test/statx.c +172 -0
  108. package/deps/liburing/liburing/test/stdout.c +232 -0
  109. package/deps/liburing/liburing/test/submit-link-fail.c +154 -0
  110. package/deps/liburing/liburing/test/submit-reuse.c +239 -0
  111. package/deps/liburing/liburing/test/symlink.c +116 -0
  112. package/deps/liburing/liburing/test/teardowns.c +58 -0
  113. package/deps/liburing/liburing/test/thread-exit.c +131 -0
  114. package/deps/liburing/liburing/test/timeout-new.c +246 -0
  115. package/deps/liburing/liburing/test/timeout-overflow.c +204 -0
  116. package/deps/liburing/liburing/test/timeout.c +1354 -0
  117. package/deps/liburing/liburing/test/unlink.c +111 -0
  118. package/deps/liburing/liburing/test/wakeup-hang.c +162 -0
  119. package/deps/rocksdb/rocksdb/README.md +32 -0
  120. package/deps/rocksdb/rocksdb/microbench/README.md +60 -0
  121. package/deps/rocksdb/rocksdb/plugin/README.md +43 -0
  122. package/deps/rocksdb/rocksdb/port/README +10 -0
  123. package/deps/rocksdb/rocksdb/utilities/transactions/lock/range/range_tree/lib/README +13 -0
  124. package/package.json +1 -1
  125. package/deps/rocksdb/rocksdb/cmake/modules/CxxFlags.cmake +0 -7
  126. package/deps/rocksdb/rocksdb/cmake/modules/FindJeMalloc.cmake +0 -29
  127. package/deps/rocksdb/rocksdb/cmake/modules/FindNUMA.cmake +0 -29
  128. package/deps/rocksdb/rocksdb/cmake/modules/FindSnappy.cmake +0 -29
  129. package/deps/rocksdb/rocksdb/cmake/modules/FindTBB.cmake +0 -33
  130. package/deps/rocksdb/rocksdb/cmake/modules/Findgflags.cmake +0 -29
  131. package/deps/rocksdb/rocksdb/cmake/modules/Findlz4.cmake +0 -29
  132. package/deps/rocksdb/rocksdb/cmake/modules/Finduring.cmake +0 -26
  133. package/deps/rocksdb/rocksdb/cmake/modules/Findzstd.cmake +0 -29
  134. package/deps/rocksdb/rocksdb/cmake/modules/ReadVersion.cmake +0 -10
  135. package/package-lock.json +0 -23687
@@ -0,0 +1,173 @@
1
+ /* SPDX-License-Identifier: MIT */
2
+ /*
3
+ * Description: run various file registration tests
4
+ *
5
+ */
6
+ #include <errno.h>
7
+ #include <stdio.h>
8
+ #include <unistd.h>
9
+ #include <stdlib.h>
10
+ #include <string.h>
11
+ #include <fcntl.h>
12
+
13
+ #include "helpers.h"
14
+ #include "liburing.h"
15
+
16
+ static void close_files(int *files, int nr_files, int add)
17
+ {
18
+ char fname[32];
19
+ int i;
20
+
21
+ for (i = 0; i < nr_files; i++) {
22
+ if (files)
23
+ close(files[i]);
24
+ if (!add)
25
+ sprintf(fname, ".reg.%d", i);
26
+ else
27
+ sprintf(fname, ".add.%d", i + add);
28
+ unlink(fname);
29
+ }
30
+ if (files)
31
+ free(files);
32
+ }
33
+
34
+ static int *open_files(int nr_files, int extra, int add)
35
+ {
36
+ char fname[32];
37
+ int *files;
38
+ int i;
39
+
40
+ files = t_calloc(nr_files + extra, sizeof(int));
41
+
42
+ for (i = 0; i < nr_files; i++) {
43
+ if (!add)
44
+ sprintf(fname, ".reg.%d", i);
45
+ else
46
+ sprintf(fname, ".add.%d", i + add);
47
+ files[i] = open(fname, O_RDWR | O_CREAT, 0644);
48
+ if (files[i] < 0) {
49
+ perror("open");
50
+ free(files);
51
+ files = NULL;
52
+ break;
53
+ }
54
+ }
55
+ if (extra) {
56
+ for (i = nr_files; i < nr_files + extra; i++)
57
+ files[i] = -1;
58
+ }
59
+
60
+ return files;
61
+ }
62
+
63
+ static int test_update_multiring(struct io_uring *r1, struct io_uring *r2,
64
+ struct io_uring *r3, int do_unreg)
65
+ {
66
+ int *fds, *newfds;
67
+
68
+ fds = open_files(10, 0, 0);
69
+ newfds = open_files(10, 0, 1);
70
+
71
+ if (io_uring_register_files(r1, fds, 10) ||
72
+ io_uring_register_files(r2, fds, 10) ||
73
+ io_uring_register_files(r3, fds, 10)) {
74
+ fprintf(stderr, "%s: register files failed\n", __FUNCTION__);
75
+ goto err;
76
+ }
77
+
78
+ if (io_uring_register_files_update(r1, 0, newfds, 10) != 10 ||
79
+ io_uring_register_files_update(r2, 0, newfds, 10) != 10 ||
80
+ io_uring_register_files_update(r3, 0, newfds, 10) != 10) {
81
+ fprintf(stderr, "%s: update files failed\n", __FUNCTION__);
82
+ goto err;
83
+ }
84
+
85
+ if (!do_unreg)
86
+ goto done;
87
+
88
+ if (io_uring_unregister_files(r1) ||
89
+ io_uring_unregister_files(r2) ||
90
+ io_uring_unregister_files(r3)) {
91
+ fprintf(stderr, "%s: unregister files failed\n", __FUNCTION__);
92
+ goto err;
93
+ }
94
+
95
+ done:
96
+ close_files(fds, 10, 0);
97
+ close_files(newfds, 10, 1);
98
+ return 0;
99
+ err:
100
+ close_files(fds, 10, 0);
101
+ close_files(newfds, 10, 1);
102
+ return 1;
103
+ }
104
+
105
+ static int test_sqe_update(struct io_uring *ring)
106
+ {
107
+ struct io_uring_sqe *sqe;
108
+ struct io_uring_cqe *cqe;
109
+ int *fds, i, ret;
110
+
111
+ fds = t_malloc(sizeof(int) * 10);
112
+ for (i = 0; i < 10; i++)
113
+ fds[i] = -1;
114
+
115
+ sqe = io_uring_get_sqe(ring);
116
+ io_uring_prep_files_update(sqe, fds, 10, 0);
117
+ ret = io_uring_submit(ring);
118
+ if (ret != 1) {
119
+ fprintf(stderr, "submit: %d\n", ret);
120
+ return 1;
121
+ }
122
+
123
+ ret = io_uring_wait_cqe(ring, &cqe);
124
+ if (ret) {
125
+ fprintf(stderr, "wait: %d\n", ret);
126
+ return 1;
127
+ }
128
+
129
+ ret = cqe->res;
130
+ io_uring_cqe_seen(ring, cqe);
131
+ free(fds);
132
+ if (ret == -EINVAL) {
133
+ fprintf(stdout, "IORING_OP_FILES_UPDATE not supported, skipping\n");
134
+ return 0;
135
+ }
136
+ return ret != 10;
137
+ }
138
+
139
+ int main(int argc, char *argv[])
140
+ {
141
+ struct io_uring r1, r2, r3;
142
+ int ret;
143
+
144
+ if (argc > 1)
145
+ return 0;
146
+
147
+ if (io_uring_queue_init(8, &r1, 0) ||
148
+ io_uring_queue_init(8, &r2, 0) ||
149
+ io_uring_queue_init(8, &r3, 0)) {
150
+ fprintf(stderr, "ring setup failed\n");
151
+ return 1;
152
+ }
153
+
154
+ ret = test_update_multiring(&r1, &r2, &r3, 1);
155
+ if (ret) {
156
+ fprintf(stderr, "test_update_multiring w/unreg\n");
157
+ return ret;
158
+ }
159
+
160
+ ret = test_update_multiring(&r1, &r2, &r3, 0);
161
+ if (ret) {
162
+ fprintf(stderr, "test_update_multiring wo/unreg\n");
163
+ return ret;
164
+ }
165
+
166
+ ret = test_sqe_update(&r1);
167
+ if (ret) {
168
+ fprintf(stderr, "test_sqe_update failed\n");
169
+ return ret;
170
+ }
171
+
172
+ return 0;
173
+ }
@@ -0,0 +1,128 @@
1
+ /* SPDX-License-Identifier: MIT */
2
+ /*
3
+ * Based on a test case from Josef Grieb - test that we can exit without
4
+ * hanging if we have the task file table pinned by a request that is linked
5
+ * to another request that doesn't finish.
6
+ */
7
+ #include <errno.h>
8
+ #include <fcntl.h>
9
+ #include <netinet/in.h>
10
+ #include <stdio.h>
11
+ #include <stdlib.h>
12
+ #include <string.h>
13
+ #include <strings.h>
14
+ #include <sys/socket.h>
15
+ #include <unistd.h>
16
+ #include <poll.h>
17
+ #include "liburing.h"
18
+
19
+ #define BACKLOG 512
20
+
21
+ #define PORT 9100
22
+
23
+ static struct io_uring ring;
24
+
25
+ static void add_poll(struct io_uring *ring, int fd)
26
+ {
27
+ struct io_uring_sqe *sqe;
28
+
29
+ sqe = io_uring_get_sqe(ring);
30
+ io_uring_prep_poll_add(sqe, fd, POLLIN);
31
+ sqe->flags |= IOSQE_IO_LINK;
32
+ }
33
+
34
+ static void add_accept(struct io_uring *ring, int fd)
35
+ {
36
+ struct io_uring_sqe *sqe;
37
+
38
+ sqe = io_uring_get_sqe(ring);
39
+ io_uring_prep_accept(sqe, fd, 0, 0, SOCK_NONBLOCK | SOCK_CLOEXEC);
40
+ }
41
+
42
+ static int setup_io_uring(void)
43
+ {
44
+ int ret;
45
+
46
+ ret = io_uring_queue_init(16, &ring, 0);
47
+ if (ret) {
48
+ fprintf(stderr, "Unable to setup io_uring: %s\n", strerror(-ret));
49
+ return 1;
50
+ }
51
+
52
+ return 0;
53
+ }
54
+
55
+ static void alarm_sig(int sig)
56
+ {
57
+ exit(0);
58
+ }
59
+
60
+ int main(int argc, char *argv[])
61
+ {
62
+ struct sockaddr_in serv_addr;
63
+ struct io_uring_cqe *cqe;
64
+ int ret, sock_listen_fd;
65
+ const int val = 1;
66
+ int i;
67
+
68
+ if (argc > 1)
69
+ return 0;
70
+
71
+ sock_listen_fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);
72
+ if (sock_listen_fd < 0) {
73
+ perror("socket");
74
+ return 1;
75
+ }
76
+
77
+ setsockopt(sock_listen_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
78
+
79
+ memset(&serv_addr, 0, sizeof(serv_addr));
80
+ serv_addr.sin_family = AF_INET;
81
+ serv_addr.sin_addr.s_addr = INADDR_ANY;
82
+
83
+ for (i = 0; i < 100; i++) {
84
+ serv_addr.sin_port = htons(PORT + i);
85
+
86
+ ret = bind(sock_listen_fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
87
+ if (!ret)
88
+ break;
89
+ if (errno != EADDRINUSE) {
90
+ fprintf(stderr, "bind: %s\n", strerror(errno));
91
+ return 1;
92
+ }
93
+ if (i == 99) {
94
+ printf("Gave up on finding a port, skipping\n");
95
+ goto out;
96
+ }
97
+ }
98
+
99
+ if (listen(sock_listen_fd, BACKLOG) < 0) {
100
+ perror("Error listening on socket\n");
101
+ return 1;
102
+ }
103
+
104
+ if (setup_io_uring())
105
+ return 1;
106
+
107
+ add_poll(&ring, sock_listen_fd);
108
+ add_accept(&ring, sock_listen_fd);
109
+
110
+ ret = io_uring_submit(&ring);
111
+ if (ret != 2) {
112
+ fprintf(stderr, "submit=%d\n", ret);
113
+ return 1;
114
+ }
115
+
116
+ signal(SIGALRM, alarm_sig);
117
+ alarm(1);
118
+
119
+ ret = io_uring_wait_cqe(&ring, &cqe);
120
+ if (ret) {
121
+ fprintf(stderr, "wait_cqe=%d\n", ret);
122
+ return 1;
123
+ }
124
+
125
+ out:
126
+ io_uring_queue_exit(&ring);
127
+ return 0;
128
+ }
@@ -0,0 +1,134 @@
1
+ /* SPDX-License-Identifier: MIT */
2
+ /*
3
+ * Based on a test case from Josef Grieb - test that we can exit without
4
+ * hanging if we have the task file table pinned by a request that is linked
5
+ * to another request that doesn't finish.
6
+ */
7
+ #include <errno.h>
8
+ #include <fcntl.h>
9
+ #include <netinet/in.h>
10
+ #include <stdio.h>
11
+ #include <stdlib.h>
12
+ #include <string.h>
13
+ #include <strings.h>
14
+ #include <sys/socket.h>
15
+ #include <unistd.h>
16
+ #include <poll.h>
17
+ #include "liburing.h"
18
+
19
+ #define BACKLOG 512
20
+
21
+ #define PORT 9100
22
+
23
+ struct io_uring ring;
24
+
25
+ struct __kernel_timespec ts = {
26
+ .tv_sec = 300,
27
+ .tv_nsec = 0,
28
+ };
29
+
30
+ static void add_timeout(struct io_uring *ring, int fd)
31
+ {
32
+ struct io_uring_sqe *sqe;
33
+
34
+ sqe = io_uring_get_sqe(ring);
35
+ io_uring_prep_timeout(sqe, &ts, 100, 0);
36
+ sqe->flags |= IOSQE_IO_LINK;
37
+ }
38
+
39
+ static void add_accept(struct io_uring *ring, int fd)
40
+ {
41
+ struct io_uring_sqe *sqe;
42
+
43
+ sqe = io_uring_get_sqe(ring);
44
+ io_uring_prep_accept(sqe, fd, 0, 0, SOCK_NONBLOCK | SOCK_CLOEXEC);
45
+ sqe->flags |= IOSQE_IO_LINK;
46
+ }
47
+
48
+ static int setup_io_uring(void)
49
+ {
50
+ int ret;
51
+
52
+ ret = io_uring_queue_init(16, &ring, 0);
53
+ if (ret) {
54
+ fprintf(stderr, "Unable to setup io_uring: %s\n", strerror(-ret));
55
+ return 1;
56
+ }
57
+
58
+ return 0;
59
+ }
60
+
61
+ static void alarm_sig(int sig)
62
+ {
63
+ exit(0);
64
+ }
65
+
66
+ int main(int argc, char *argv[])
67
+ {
68
+ struct sockaddr_in serv_addr;
69
+ struct io_uring_cqe *cqe;
70
+ int ret, sock_listen_fd;
71
+ const int val = 1;
72
+ int i;
73
+
74
+ if (argc > 1)
75
+ return 0;
76
+
77
+ sock_listen_fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);
78
+ if (sock_listen_fd < 0) {
79
+ perror("socket");
80
+ return 1;
81
+ }
82
+
83
+ setsockopt(sock_listen_fd, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val));
84
+
85
+ memset(&serv_addr, 0, sizeof(serv_addr));
86
+ serv_addr.sin_family = AF_INET;
87
+ serv_addr.sin_addr.s_addr = INADDR_ANY;
88
+
89
+ for (i = 0; i < 100; i++) {
90
+ serv_addr.sin_port = htons(PORT + i);
91
+
92
+ ret = bind(sock_listen_fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
93
+ if (!ret)
94
+ break;
95
+ if (errno != EADDRINUSE) {
96
+ fprintf(stderr, "bind: %s\n", strerror(errno));
97
+ return 1;
98
+ }
99
+ if (i == 99) {
100
+ printf("Gave up on finding a port, skipping\n");
101
+ goto out;
102
+ }
103
+ }
104
+
105
+ if (listen(sock_listen_fd, BACKLOG) < 0) {
106
+ perror("Error listening on socket\n");
107
+ return 1;
108
+ }
109
+
110
+ if (setup_io_uring())
111
+ return 1;
112
+
113
+ add_timeout(&ring, sock_listen_fd);
114
+ add_accept(&ring, sock_listen_fd);
115
+
116
+ ret = io_uring_submit(&ring);
117
+ if (ret != 2) {
118
+ fprintf(stderr, "submit=%d\n", ret);
119
+ return 1;
120
+ }
121
+
122
+ signal(SIGALRM, alarm_sig);
123
+ alarm(1);
124
+
125
+ ret = io_uring_wait_cqe(&ring, &cqe);
126
+ if (ret) {
127
+ fprintf(stderr, "wait_cqe=%d\n", ret);
128
+ return 1;
129
+ }
130
+
131
+ out:
132
+ io_uring_queue_exit(&ring);
133
+ return 0;
134
+ }
@@ -0,0 +1,90 @@
1
+ /* SPDX-License-Identifier: MIT */
2
+ #include <errno.h>
3
+ #include <stdio.h>
4
+ #include <unistd.h>
5
+ #include <stdlib.h>
6
+ #include <string.h>
7
+ #include <fcntl.h>
8
+ #include <sys/types.h>
9
+
10
+ #include "helpers.h"
11
+ #include "liburing.h"
12
+
13
+ #define IOVECS_LEN 2
14
+
15
+ int main(int argc, char *argv[])
16
+ {
17
+ struct iovec iovecs[IOVECS_LEN];
18
+ struct io_uring ring;
19
+ int i, fd, ret;
20
+
21
+ if (argc > 1)
22
+ return 0;
23
+
24
+ fd = open("/dev/zero", O_RDONLY);
25
+ if (fd < 0) {
26
+ fprintf(stderr, "Failed to open /dev/zero\n");
27
+ return 1;
28
+ }
29
+
30
+ if (io_uring_queue_init(32, &ring, 0) < 0) {
31
+ fprintf(stderr, "Faild to init io_uring\n");
32
+ close(fd);
33
+ return 1;
34
+ }
35
+
36
+ for (i = 0; i < IOVECS_LEN; ++i) {
37
+ iovecs[i].iov_base = t_malloc(64);
38
+ iovecs[i].iov_len = 64;
39
+ };
40
+
41
+ ret = io_uring_register_buffers(&ring, iovecs, IOVECS_LEN);
42
+ if (ret) {
43
+ fprintf(stderr, "Failed to register buffers\n");
44
+ return 1;
45
+ }
46
+
47
+ for (i = 0; i < IOVECS_LEN; ++i) {
48
+ struct io_uring_sqe *sqe = io_uring_get_sqe(&ring);
49
+ const char *str = "#include <errno.h>";
50
+
51
+ iovecs[i].iov_len = strlen(str);
52
+ io_uring_prep_read_fixed(sqe, fd, iovecs[i].iov_base, strlen(str), 0, i);
53
+ if (i == 0)
54
+ io_uring_sqe_set_flags(sqe, IOSQE_IO_LINK);
55
+ io_uring_sqe_set_data(sqe, (void *)str);
56
+ }
57
+
58
+ ret = io_uring_submit_and_wait(&ring, IOVECS_LEN);
59
+ if (ret < 0) {
60
+ fprintf(stderr, "Failed to submit IO\n");
61
+ return 1;
62
+ } else if (ret < 2) {
63
+ fprintf(stderr, "Submitted %d, wanted %d\n", ret, IOVECS_LEN);
64
+ return 1;
65
+ }
66
+
67
+ for (i = 0; i < IOVECS_LEN; i++) {
68
+ struct io_uring_cqe *cqe;
69
+
70
+ ret = io_uring_wait_cqe(&ring, &cqe);
71
+ if (ret) {
72
+ fprintf(stderr, "wait_cqe=%d\n", ret);
73
+ return 1;
74
+ }
75
+ if (cqe->res != iovecs[i].iov_len) {
76
+ fprintf(stderr, "read: wanted %ld, got %d\n",
77
+ (long) iovecs[i].iov_len, cqe->res);
78
+ return 1;
79
+ }
80
+ io_uring_cqe_seen(&ring, cqe);
81
+ }
82
+
83
+ close(fd);
84
+ io_uring_queue_exit(&ring);
85
+
86
+ for (i = 0; i < IOVECS_LEN; ++i)
87
+ free(iovecs[i].iov_base);
88
+
89
+ return 0;
90
+ }