polyphony 0.94 → 0.95

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +2 -2
  3. data/.gitignore +3 -3
  4. data/CHANGELOG.md +14 -0
  5. data/docs/api-reference/fiber.md +2 -2
  6. data/docs/api-reference/object.md +3 -3
  7. data/docs/main-concepts/exception-handling.md +2 -2
  8. data/ext/polyphony/backend_common.c +3 -3
  9. data/ext/polyphony/backend_io_uring.c +18 -16
  10. data/ext/polyphony/event.c +1 -1
  11. data/ext/polyphony/extconf.rb +5 -3
  12. data/ext/polyphony/fiber.c +5 -13
  13. data/ext/polyphony/io_extensions.c +1 -1
  14. data/ext/polyphony/pipe.c +1 -1
  15. data/ext/polyphony/polyphony.c +1 -1
  16. data/ext/polyphony/polyphony_ext.c +1 -1
  17. data/ext/polyphony/queue.c +1 -1
  18. data/ext/polyphony/ring_buffer.c +1 -0
  19. data/ext/polyphony/socket_extensions.c +1 -1
  20. data/ext/polyphony/thread.c +1 -1
  21. data/lib/polyphony/extensions/enumerator.rb +16 -0
  22. data/lib/polyphony/extensions/socket.rb +2 -0
  23. data/lib/polyphony/extensions.rb +1 -0
  24. data/lib/polyphony/version.rb +1 -1
  25. data/polyphony.gemspec +2 -2
  26. data/test/test_backend.rb +5 -1
  27. data/test/test_enumerator.rb +46 -0
  28. data/test/test_io.rb +241 -216
  29. data/test/test_socket.rb +1 -1
  30. data/test/test_thread_pool.rb +3 -3
  31. data/vendor/liburing/.github/workflows/build.yml +51 -5
  32. data/vendor/liburing/.github/workflows/shellcheck.yml +1 -1
  33. data/vendor/liburing/.gitignore +6 -123
  34. data/vendor/liburing/CHANGELOG +35 -0
  35. data/vendor/liburing/CITATION.cff +11 -0
  36. data/vendor/liburing/LICENSE +16 -3
  37. data/vendor/liburing/Makefile +3 -1
  38. data/vendor/liburing/Makefile.common +1 -0
  39. data/vendor/liburing/README +14 -2
  40. data/vendor/liburing/SECURITY.md +6 -0
  41. data/vendor/liburing/configure +16 -15
  42. data/vendor/liburing/examples/Makefile +4 -1
  43. data/vendor/liburing/examples/io_uring-udp.c +395 -0
  44. data/vendor/liburing/examples/poll-bench.c +101 -0
  45. data/vendor/liburing/examples/send-zerocopy.c +339 -0
  46. data/vendor/liburing/liburing.spec +1 -1
  47. data/vendor/liburing/man/io_uring.7 +38 -11
  48. data/vendor/liburing/man/io_uring_buf_ring_add.3 +53 -0
  49. data/vendor/liburing/man/io_uring_buf_ring_advance.3 +31 -0
  50. data/vendor/liburing/man/io_uring_buf_ring_cq_advance.3 +41 -0
  51. data/vendor/liburing/man/io_uring_buf_ring_init.3 +30 -0
  52. data/vendor/liburing/man/io_uring_buf_ring_mask.3 +27 -0
  53. data/vendor/liburing/man/io_uring_cq_advance.3 +29 -15
  54. data/vendor/liburing/man/io_uring_cq_has_overflow.3 +25 -0
  55. data/vendor/liburing/man/io_uring_cq_ready.3 +9 -8
  56. data/vendor/liburing/man/io_uring_cqe_get_data.3 +32 -13
  57. data/vendor/liburing/man/io_uring_cqe_get_data64.3 +1 -0
  58. data/vendor/liburing/man/io_uring_cqe_seen.3 +22 -12
  59. data/vendor/liburing/man/io_uring_enter.2 +249 -32
  60. data/vendor/liburing/man/io_uring_enter2.2 +1 -0
  61. data/vendor/liburing/man/io_uring_free_probe.3 +11 -8
  62. data/vendor/liburing/man/io_uring_get_events.3 +33 -0
  63. data/vendor/liburing/man/io_uring_get_probe.3 +9 -8
  64. data/vendor/liburing/man/io_uring_get_sqe.3 +29 -10
  65. data/vendor/liburing/man/io_uring_opcode_supported.3 +11 -10
  66. data/vendor/liburing/man/io_uring_peek_cqe.3 +38 -0
  67. data/vendor/liburing/man/io_uring_prep_accept.3 +197 -0
  68. data/vendor/liburing/man/io_uring_prep_accept_direct.3 +1 -0
  69. data/vendor/liburing/man/io_uring_prep_cancel.3 +118 -0
  70. data/vendor/liburing/man/io_uring_prep_cancel64.3 +1 -0
  71. data/vendor/liburing/man/io_uring_prep_close.3 +59 -0
  72. data/vendor/liburing/man/io_uring_prep_close_direct.3 +1 -0
  73. data/vendor/liburing/man/io_uring_prep_connect.3 +66 -0
  74. data/vendor/liburing/man/io_uring_prep_fadvise.3 +59 -0
  75. data/vendor/liburing/man/io_uring_prep_fallocate.3 +59 -0
  76. data/vendor/liburing/man/io_uring_prep_files_update.3 +92 -0
  77. data/vendor/liburing/man/io_uring_prep_fsync.3 +70 -0
  78. data/vendor/liburing/man/io_uring_prep_link.3 +1 -0
  79. data/vendor/liburing/man/io_uring_prep_linkat.3 +91 -0
  80. data/vendor/liburing/man/io_uring_prep_madvise.3 +56 -0
  81. data/vendor/liburing/man/io_uring_prep_mkdir.3 +1 -0
  82. data/vendor/liburing/man/io_uring_prep_mkdirat.3 +83 -0
  83. data/vendor/liburing/man/io_uring_prep_msg_ring.3 +39 -25
  84. data/vendor/liburing/man/io_uring_prep_multishot_accept.3 +1 -0
  85. data/vendor/liburing/man/io_uring_prep_multishot_accept_direct.3 +1 -0
  86. data/vendor/liburing/man/io_uring_prep_nop.3 +28 -0
  87. data/vendor/liburing/man/io_uring_prep_openat.3 +117 -0
  88. data/vendor/liburing/man/io_uring_prep_openat2.3 +117 -0
  89. data/vendor/liburing/man/io_uring_prep_openat2_direct.3 +1 -0
  90. data/vendor/liburing/man/io_uring_prep_openat_direct.3 +1 -0
  91. data/vendor/liburing/man/io_uring_prep_poll_add.3 +72 -0
  92. data/vendor/liburing/man/io_uring_prep_poll_multishot.3 +1 -0
  93. data/vendor/liburing/man/io_uring_prep_poll_remove.3 +55 -0
  94. data/vendor/liburing/man/io_uring_prep_poll_update.3 +89 -0
  95. data/vendor/liburing/man/io_uring_prep_provide_buffers.3 +131 -0
  96. data/vendor/liburing/man/io_uring_prep_read.3 +33 -14
  97. data/vendor/liburing/man/io_uring_prep_read_fixed.3 +39 -21
  98. data/vendor/liburing/man/io_uring_prep_readv.3 +49 -15
  99. data/vendor/liburing/man/io_uring_prep_readv2.3 +49 -17
  100. data/vendor/liburing/man/io_uring_prep_recv.3 +105 -0
  101. data/vendor/liburing/man/io_uring_prep_recv_multishot.3 +1 -0
  102. data/vendor/liburing/man/io_uring_prep_recvmsg.3 +124 -0
  103. data/vendor/liburing/man/io_uring_prep_recvmsg_multishot.3 +1 -0
  104. data/vendor/liburing/man/io_uring_prep_remove_buffers.3 +52 -0
  105. data/vendor/liburing/man/io_uring_prep_rename.3 +1 -0
  106. data/vendor/liburing/man/io_uring_prep_renameat.3 +96 -0
  107. data/vendor/liburing/man/io_uring_prep_send.3 +57 -0
  108. data/vendor/liburing/man/io_uring_prep_send_zc.3 +64 -0
  109. data/vendor/liburing/man/io_uring_prep_sendmsg.3 +69 -0
  110. data/vendor/liburing/man/io_uring_prep_shutdown.3 +53 -0
  111. data/vendor/liburing/man/io_uring_prep_socket.3 +118 -0
  112. data/vendor/liburing/man/io_uring_prep_socket_direct.3 +1 -0
  113. data/vendor/liburing/man/io_uring_prep_socket_direct_alloc.3 +1 -0
  114. data/vendor/liburing/man/io_uring_prep_splice.3 +80 -0
  115. data/vendor/liburing/man/io_uring_prep_statx.3 +74 -0
  116. data/vendor/liburing/man/io_uring_prep_symlink.3 +1 -0
  117. data/vendor/liburing/man/io_uring_prep_symlinkat.3 +85 -0
  118. data/vendor/liburing/man/io_uring_prep_sync_file_range.3 +59 -0
  119. data/vendor/liburing/man/io_uring_prep_tee.3 +74 -0
  120. data/vendor/liburing/man/io_uring_prep_timeout.3 +95 -0
  121. data/vendor/liburing/man/io_uring_prep_timeout_remove.3 +1 -0
  122. data/vendor/liburing/man/io_uring_prep_timeout_update.3 +98 -0
  123. data/vendor/liburing/man/io_uring_prep_unlink.3 +1 -0
  124. data/vendor/liburing/man/io_uring_prep_unlinkat.3 +82 -0
  125. data/vendor/liburing/man/io_uring_prep_write.3 +32 -15
  126. data/vendor/liburing/man/io_uring_prep_write_fixed.3 +39 -21
  127. data/vendor/liburing/man/io_uring_prep_writev.3 +50 -16
  128. data/vendor/liburing/man/io_uring_prep_writev2.3 +50 -17
  129. data/vendor/liburing/man/io_uring_queue_exit.3 +3 -4
  130. data/vendor/liburing/man/io_uring_queue_init.3 +58 -13
  131. data/vendor/liburing/man/io_uring_queue_init_params.3 +1 -0
  132. data/vendor/liburing/man/io_uring_recvmsg_cmsg_firsthdr.3 +1 -0
  133. data/vendor/liburing/man/io_uring_recvmsg_cmsg_nexthdr.3 +1 -0
  134. data/vendor/liburing/man/io_uring_recvmsg_name.3 +1 -0
  135. data/vendor/liburing/man/io_uring_recvmsg_out.3 +78 -0
  136. data/vendor/liburing/man/io_uring_recvmsg_payload.3 +1 -0
  137. data/vendor/liburing/man/io_uring_recvmsg_payload_length.3 +1 -0
  138. data/vendor/liburing/man/io_uring_recvmsg_validate.3 +1 -0
  139. data/vendor/liburing/man/io_uring_register.2 +153 -13
  140. data/vendor/liburing/man/io_uring_register_buf_ring.3 +140 -0
  141. data/vendor/liburing/man/io_uring_register_buffers.3 +32 -12
  142. data/vendor/liburing/man/io_uring_register_eventfd.3 +51 -0
  143. data/vendor/liburing/man/io_uring_register_eventfd_async.3 +1 -0
  144. data/vendor/liburing/man/io_uring_register_file_alloc_range.3 +52 -0
  145. data/vendor/liburing/man/io_uring_register_files.3 +33 -11
  146. data/vendor/liburing/man/io_uring_register_files_sparse.3 +1 -0
  147. data/vendor/liburing/man/io_uring_register_iowq_aff.3 +61 -0
  148. data/vendor/liburing/man/io_uring_register_iowq_max_workers.3 +71 -0
  149. data/vendor/liburing/man/io_uring_register_ring_fd.3 +49 -0
  150. data/vendor/liburing/man/io_uring_register_sync_cancel.3 +71 -0
  151. data/vendor/liburing/man/io_uring_setup.2 +119 -13
  152. data/vendor/liburing/man/io_uring_sq_ready.3 +14 -8
  153. data/vendor/liburing/man/io_uring_sq_space_left.3 +9 -9
  154. data/vendor/liburing/man/io_uring_sqe_set_data.3 +29 -11
  155. data/vendor/liburing/man/io_uring_sqe_set_data64.3 +1 -0
  156. data/vendor/liburing/man/io_uring_sqe_set_flags.3 +38 -11
  157. data/vendor/liburing/man/io_uring_sqring_wait.3 +13 -9
  158. data/vendor/liburing/man/io_uring_submit.3 +29 -12
  159. data/vendor/liburing/man/io_uring_submit_and_get_events.3 +31 -0
  160. data/vendor/liburing/man/io_uring_submit_and_wait.3 +16 -12
  161. data/vendor/liburing/man/io_uring_submit_and_wait_timeout.3 +30 -23
  162. data/vendor/liburing/man/io_uring_unregister_buf_ring.3 +30 -0
  163. data/vendor/liburing/man/io_uring_unregister_buffers.3 +11 -10
  164. data/vendor/liburing/man/io_uring_unregister_eventfd.3 +1 -0
  165. data/vendor/liburing/man/io_uring_unregister_files.3 +11 -10
  166. data/vendor/liburing/man/io_uring_unregister_iowq_aff.3 +1 -0
  167. data/vendor/liburing/man/io_uring_unregister_ring_fd.3 +32 -0
  168. data/vendor/liburing/man/io_uring_wait_cqe.3 +19 -12
  169. data/vendor/liburing/man/io_uring_wait_cqe_nr.3 +21 -14
  170. data/vendor/liburing/man/io_uring_wait_cqe_timeout.3 +27 -13
  171. data/vendor/liburing/man/io_uring_wait_cqes.3 +24 -14
  172. data/vendor/liburing/src/Makefile +8 -7
  173. data/vendor/liburing/src/arch/aarch64/lib.h +48 -0
  174. data/vendor/liburing/src/arch/aarch64/syscall.h +0 -4
  175. data/vendor/liburing/src/arch/generic/lib.h +0 -4
  176. data/vendor/liburing/src/arch/generic/syscall.h +29 -16
  177. data/vendor/liburing/src/arch/syscall-defs.h +41 -14
  178. data/vendor/liburing/src/arch/x86/lib.h +0 -21
  179. data/vendor/liburing/src/arch/x86/syscall.h +146 -10
  180. data/vendor/liburing/src/include/liburing/io_uring.h +245 -5
  181. data/vendor/liburing/src/include/liburing.h +468 -35
  182. data/vendor/liburing/src/int_flags.h +1 -0
  183. data/vendor/liburing/src/lib.h +20 -16
  184. data/vendor/liburing/src/liburing.map +16 -0
  185. data/vendor/liburing/src/nolibc.c +1 -1
  186. data/vendor/liburing/src/queue.c +87 -55
  187. data/vendor/liburing/src/register.c +129 -53
  188. data/vendor/liburing/src/setup.c +65 -28
  189. data/vendor/liburing/src/syscall.c +14 -32
  190. data/vendor/liburing/src/syscall.h +12 -64
  191. data/vendor/liburing/test/{232c93d07b74-test.c → 232c93d07b74.c} +8 -9
  192. data/vendor/liburing/test/{35fa71a030ca-test.c → 35fa71a030ca.c} +4 -4
  193. data/vendor/liburing/test/{500f9fbadef8-test.c → 500f9fbadef8.c} +7 -7
  194. data/vendor/liburing/test/{7ad0e4b2f83c-test.c → 7ad0e4b2f83c.c} +8 -7
  195. data/vendor/liburing/test/{8a9973408177-test.c → 8a9973408177.c} +4 -3
  196. data/vendor/liburing/test/{917257daa0fe-test.c → 917257daa0fe.c} +3 -2
  197. data/vendor/liburing/test/Makefile +60 -62
  198. data/vendor/liburing/test/{a0908ae19763-test.c → a0908ae19763.c} +3 -2
  199. data/vendor/liburing/test/{a4c0b3decb33-test.c → a4c0b3decb33.c} +3 -2
  200. data/vendor/liburing/test/accept-link.c +5 -4
  201. data/vendor/liburing/test/accept-reuse.c +17 -16
  202. data/vendor/liburing/test/accept-test.c +14 -10
  203. data/vendor/liburing/test/accept.c +529 -107
  204. data/vendor/liburing/test/across-fork.c +7 -6
  205. data/vendor/liburing/test/{b19062a56726-test.c → b19062a56726.c} +3 -2
  206. data/vendor/liburing/test/{b5837bd5311d-test.c → b5837bd5311d.c} +10 -9
  207. data/vendor/liburing/test/buf-ring.c +420 -0
  208. data/vendor/liburing/test/{ce593a6c480a-test.c → ce593a6c480a.c} +15 -12
  209. data/vendor/liburing/test/connect.c +8 -7
  210. data/vendor/liburing/test/cq-full.c +5 -4
  211. data/vendor/liburing/test/cq-overflow.c +242 -12
  212. data/vendor/liburing/test/cq-peek-batch.c +5 -4
  213. data/vendor/liburing/test/cq-ready.c +5 -4
  214. data/vendor/liburing/test/cq-size.c +5 -4
  215. data/vendor/liburing/test/{d4ae271dfaae-test.c → d4ae271dfaae.c} +2 -2
  216. data/vendor/liburing/test/{d77a67ed5f27-test.c → d77a67ed5f27.c} +6 -6
  217. data/vendor/liburing/test/defer-taskrun.c +336 -0
  218. data/vendor/liburing/test/defer.c +26 -14
  219. data/vendor/liburing/test/double-poll-crash.c +15 -5
  220. data/vendor/liburing/test/drop-submit.c +5 -3
  221. data/vendor/liburing/test/{eeed8b54e0df-test.c → eeed8b54e0df.c} +7 -6
  222. data/vendor/liburing/test/empty-eownerdead.c +4 -4
  223. data/vendor/liburing/test/eventfd-disable.c +48 -20
  224. data/vendor/liburing/test/eventfd-reg.c +10 -9
  225. data/vendor/liburing/test/eventfd-ring.c +13 -12
  226. data/vendor/liburing/test/eventfd.c +13 -12
  227. data/vendor/liburing/test/exit-no-cleanup.c +1 -1
  228. data/vendor/liburing/test/fadvise.c +3 -3
  229. data/vendor/liburing/test/fallocate.c +16 -9
  230. data/vendor/liburing/test/{fc2a85cb02ef-test.c → fc2a85cb02ef.c} +4 -3
  231. data/vendor/liburing/test/fd-pass.c +187 -0
  232. data/vendor/liburing/test/file-register.c +302 -36
  233. data/vendor/liburing/test/file-update.c +62 -4
  234. data/vendor/liburing/test/file-verify.c +6 -2
  235. data/vendor/liburing/test/files-exit-hang-poll.c +11 -25
  236. data/vendor/liburing/test/files-exit-hang-timeout.c +13 -10
  237. data/vendor/liburing/test/fixed-buf-iter.c +115 -0
  238. data/vendor/liburing/test/fixed-link.c +10 -10
  239. data/vendor/liburing/test/fixed-reuse.c +160 -0
  240. data/vendor/liburing/test/fpos.c +6 -3
  241. data/vendor/liburing/test/fsync.c +3 -3
  242. data/vendor/liburing/test/hardlink.c +10 -6
  243. data/vendor/liburing/test/helpers.c +137 -4
  244. data/vendor/liburing/test/helpers.h +27 -0
  245. data/vendor/liburing/test/io-cancel.c +16 -11
  246. data/vendor/liburing/test/io_uring_enter.c +46 -81
  247. data/vendor/liburing/test/io_uring_passthrough.c +451 -0
  248. data/vendor/liburing/test/io_uring_register.c +59 -229
  249. data/vendor/liburing/test/io_uring_setup.c +24 -29
  250. data/vendor/liburing/test/iopoll-leak.c +85 -0
  251. data/vendor/liburing/test/iopoll.c +16 -9
  252. data/vendor/liburing/test/lfs-openat-write.c +3 -1
  253. data/vendor/liburing/test/link-timeout.c +4 -3
  254. data/vendor/liburing/test/link.c +8 -7
  255. data/vendor/liburing/test/madvise.c +2 -2
  256. data/vendor/liburing/test/mkdir.c +9 -5
  257. data/vendor/liburing/test/msg-ring.c +46 -20
  258. data/vendor/liburing/test/multicqes_drain.c +51 -12
  259. data/vendor/liburing/test/nolibc.c +60 -0
  260. data/vendor/liburing/test/nop.c +78 -16
  261. data/vendor/liburing/test/nvme.h +168 -0
  262. data/vendor/liburing/test/open-direct-link.c +188 -0
  263. data/vendor/liburing/test/open-direct-pick.c +180 -0
  264. data/vendor/liburing/test/openat2.c +3 -3
  265. data/vendor/liburing/test/poll-cancel-all.c +472 -0
  266. data/vendor/liburing/test/poll-link.c +9 -18
  267. data/vendor/liburing/test/poll-mshot-overflow.c +162 -0
  268. data/vendor/liburing/test/poll-mshot-update.c +83 -33
  269. data/vendor/liburing/test/pollfree.c +2 -2
  270. data/vendor/liburing/test/read-before-exit.c +112 -0
  271. data/vendor/liburing/test/read-write.c +83 -1
  272. data/vendor/liburing/test/recv-msgall-stream.c +398 -0
  273. data/vendor/liburing/test/recv-msgall.c +265 -0
  274. data/vendor/liburing/test/recv-multishot.c +505 -0
  275. data/vendor/liburing/test/rename.c +2 -5
  276. data/vendor/liburing/test/ring-leak.c +97 -0
  277. data/vendor/liburing/test/ringbuf-read.c +200 -0
  278. data/vendor/liburing/test/rsrc_tags.c +25 -13
  279. data/vendor/liburing/test/runtests-quiet.sh +11 -0
  280. data/vendor/liburing/test/runtests.sh +18 -20
  281. data/vendor/liburing/test/rw_merge_test.c +3 -2
  282. data/vendor/liburing/test/send-zerocopy.c +684 -0
  283. data/vendor/liburing/test/send_recv.c +49 -2
  284. data/vendor/liburing/test/send_recvmsg.c +165 -55
  285. data/vendor/liburing/test/shutdown.c +3 -4
  286. data/vendor/liburing/test/sigfd-deadlock.c +22 -8
  287. data/vendor/liburing/test/single-issuer.c +171 -0
  288. data/vendor/liburing/test/socket-rw-eagain.c +2 -12
  289. data/vendor/liburing/test/socket-rw-offset.c +2 -11
  290. data/vendor/liburing/test/socket-rw.c +2 -11
  291. data/vendor/liburing/test/socket.c +409 -0
  292. data/vendor/liburing/test/sq-poll-dup.c +1 -1
  293. data/vendor/liburing/test/sq-poll-share.c +1 -1
  294. data/vendor/liburing/test/statx.c +2 -2
  295. data/vendor/liburing/test/submit-and-wait.c +108 -0
  296. data/vendor/liburing/test/submit-link-fail.c +5 -3
  297. data/vendor/liburing/test/submit-reuse.c +0 -2
  298. data/vendor/liburing/test/sync-cancel.c +235 -0
  299. data/vendor/liburing/test/test.h +35 -0
  300. data/vendor/liburing/test/timeout-overflow.c +11 -11
  301. data/vendor/liburing/test/timeout.c +7 -7
  302. data/vendor/liburing/test/tty-write-dpoll.c +60 -0
  303. data/vendor/liburing/test/unlink.c +1 -1
  304. data/vendor/liburing/test/xattr.c +425 -0
  305. metadata +143 -22
  306. data/Gemfile.lock +0 -78
@@ -4,20 +4,22 @@
4
4
  .\"
5
5
  .\" SPDX-License-Identifier: LGPL-2.0-or-later
6
6
  .\"
7
- .TH IO_URING_SETUP 2 2019-01-29 "Linux" "Linux Programmer's Manual"
7
+ .TH io_uring_setup 2 2019-01-29 "Linux" "Linux Programmer's Manual"
8
8
  .SH NAME
9
9
  io_uring_setup \- setup a context for performing asynchronous I/O
10
10
  .SH SYNOPSIS
11
11
  .nf
12
- .BR "#include <linux/io_uring.h>"
12
+ .BR "#include <liburing.h>"
13
13
  .PP
14
14
  .BI "int io_uring_setup(u32 " entries ", struct io_uring_params *" p );
15
15
  .fi
16
- .PP
16
+ .PPAA
17
17
  .SH DESCRIPTION
18
18
  .PP
19
- The io_uring_setup() system call sets up a submission queue (SQ) and
20
- completion queue (CQ) with at least
19
+ The
20
+ .BR io_uring_setup (2)
21
+ system call sets up a submission queue (SQ) and completion queue (CQ) with at
22
+ least
21
23
  .I entries
22
24
  entries, and returns a file descriptor which can be used to perform
23
25
  subsequent operations on the io_uring instance. The submission and
@@ -171,7 +173,7 @@ then it will be clamped at
171
173
  .B IORING_MAX_CQ_ENTRIES .
172
174
  .TP
173
175
  .B IORING_SETUP_ATTACH_WQ
174
- This flag should be set in conjunction with
176
+ This flag should be set in conjunction with
175
177
  .IR "struct io_uring_params.wq_fd"
176
178
  being set to an existing io_uring ring file descriptor. When set, the
177
179
  io_uring instance being created will share the asynchronous worker
@@ -188,7 +190,7 @@ for details on how to enable the ring. Available since 5.10.
188
190
  .B IORING_SETUP_SUBMIT_ALL
189
191
  Normally io_uring stops submitting a batch of request, if one of these requests
190
192
  results in an error. This can cause submission of less than what is expected,
191
- if a request ends in error while being submitted. If the ring is creted with
193
+ if a request ends in error while being submitted. If the ring is created with
192
194
  this flag,
193
195
  .BR io_uring_enter (2)
194
196
  will continue submitting requests even if it encounters an error submitting
@@ -196,6 +198,86 @@ a request. CQEs are still posted for errored request regardless of whether or
196
198
  not this flag is set at ring creation time, the only difference is if the
197
199
  submit sequence is halted or continued when an error is observed. Available
198
200
  since 5.18.
201
+ .TP
202
+ .B IORING_SETUP_COOP_TASKRUN
203
+ By default, io_uring will interrupt a task running in userspace when a
204
+ completion event comes in. This is to ensure that completions run in a timely
205
+ manner. For a lot of use cases, this is overkill and can cause reduced
206
+ performance from both the inter-processor interrupt used to do this, the
207
+ kernel/user transition, the needless interruption of the tasks userspace
208
+ activities, and reduced batching if completions come in at a rapid rate. Most
209
+ applications don't need the forceful interruption, as the events are processed
210
+ at any kernel/user transition. The exception are setups where the application
211
+ uses multiple threads operating on the same ring, where the application
212
+ waiting on completions isn't the one that submitted them. For most other
213
+ use cases, setting this flag will improve performance. Available since 5.19.
214
+ .TP
215
+ .B IORING_SETUP_TASKRUN_FLAG
216
+ Used in conjunction with
217
+ .B IORING_SETUP_COOP_TASKRUN,
218
+ this provides a flag,
219
+ .B IORING_SQ_TASKRUN,
220
+ which is set in the SQ ring
221
+ .I flags
222
+ whenever completions are pending that should be processed. liburing will check
223
+ for this flag even when doing
224
+ .BR io_uring_peek_cqe (3)
225
+ and enter the kernel to process them, and applications can do the same. This
226
+ makes
227
+ .B IORING_SETUP_TASKRUN_FLAG
228
+ safe to use even when applications rely on a peek style operation on the CQ
229
+ ring to see if anything might be pending to reap. Available since 5.19.
230
+ .TP
231
+ .B IORING_SETUP_SQE128
232
+ If set, io_uring will use 128-byte SQEs rather than the normal 64-byte sized
233
+ variant. This is a requirement for using certain request types, as of 5.19
234
+ only the
235
+ .B IORING_OP_URING_CMD
236
+ passthrough command for NVMe passthrough needs this. Available since 5.19.
237
+ .TP
238
+ .B IORING_SETUP_CQE32
239
+ If set, io_uring will use 32-byte CQEs rather than the normal 16-byte sized
240
+ variant. This is a requirement for using certain request types, as of 5.19
241
+ only the
242
+ .B IORING_OP_URING_CMD
243
+ passthrough command for NVMe passthrough needs this. Available since 5.19.
244
+ .TP
245
+ .B IORING_SETUP_SINGLE_ISSUER
246
+ A hint to the kernel that only a single task (or thread) will submit requests, which is
247
+ used for internal optimisations. The submission task is either the task that created the
248
+ ring, or if
249
+ .B IORING_SETUP_R_DISABLED
250
+ is specified then it is the task that enables the ring through
251
+ .BR io_uring_register (2) .
252
+ The kernel enforces this rule, failing requests with
253
+ .B -EEXIST
254
+ if the restriction is violated.
255
+ Note that when
256
+ .B IORING_SETUP_SQPOLL
257
+ is set it is considered that the polling task is doing all submissions
258
+ on behalf of the userspace and so it always complies with the rule disregarding
259
+ how many userspace tasks do
260
+ .BR io_uring_enter(2).
261
+ Available since 6.0.
262
+ .TP
263
+ .B IORING_SETUP_DEFER_TASKRUN
264
+ By default, io_uring will process all outstanding work at the end of any system
265
+ call or thread interrupt. This can delay the application from making other progress.
266
+ Setting this flag will hint to io_uring that it should defer work until an
267
+ .BR io_uring_enter(2)
268
+ call with the
269
+ .B IORING_ENTER_GETEVENTS
270
+ flag set. This allows the application to request work to run just before it wants to
271
+ process completions.
272
+ This flag requires the
273
+ .BR IORING_SETUP_SINGLE_ISSUER
274
+ flag to be set, and also enforces that the call to
275
+ .BR io_uring_enter(2)
276
+ is called from the same thread that submitted requests.
277
+ Note that if this flag is set then it is the application's responsibility to periodically
278
+ trigger work (for example via any of the CQE waiting functions) or else completions may
279
+ not be delivered.
280
+ Available since 6.1.
199
281
  .PP
200
282
  If no flags are specified, the io_uring instance is setup for
201
283
  interrupt driven I/O. I/O may be submitted using
@@ -218,7 +300,7 @@ call. The SQEs must still be allocated separately. This brings the necessary
218
300
  calls down from three to two. Available since kernel 5.4.
219
301
  .TP
220
302
  .B IORING_FEAT_NODROP
221
- If this flag is set, io_uring supports never dropping completion events.
303
+ If this flag is set, io_uring supports almost never dropping completion events.
222
304
  If a completion event occurs and the CQ ring is full, the kernel stores
223
305
  the event internally until such a time that the CQ ring has room for more
224
306
  entries. If this overflow condition is entered, attempting to submit more
@@ -226,7 +308,14 @@ IO will fail with the
226
308
  .B -EBUSY
227
309
  error value, if it can't flush the overflown events to the CQ ring. If this
228
310
  happens, the application must reap events from the CQ ring and attempt the
229
- submit again. Available since kernel 5.5.
311
+ submit again. If the kernel has no free memory to store the event internally
312
+ it will be visible by an increase in the overflow value on the cqring.
313
+ Available since kernel 5.5. Additionally
314
+ .BR io_uring_enter (2)
315
+ will return
316
+ .B -EBADR
317
+ the next time it would otherwise sleep waiting for completions (since kernel 5.19).
318
+
230
319
  .TP
231
320
  .B IORING_FEAT_SUBMIT_STABLE
232
321
  If this flag is set, applications can be certain that any data for
@@ -337,6 +426,25 @@ If this flag is set, then io_uring supports a variety of features related
337
426
  to fixed files and buffers. In particular, it indicates that registered
338
427
  buffers can be updated in-place, whereas before the full set would have to
339
428
  be unregistered first. Available since kernel 5.13.
429
+ .TP
430
+ .B IORING_FEAT_CQE_SKIP
431
+ If this flag is set, then io_uring supports setting
432
+ .B IOSQE_CQE_SKIP_SUCCESS
433
+ in the submitted SQE, indicating that no CQE should be generated for this
434
+ SQE if it executes normally. If an error happens processing the SQE, a
435
+ CQE with the appropriate error value will still be generated. Available since
436
+ kernel 5.17.
437
+ .TP
438
+ .B IORING_FEAT_LINKED_FILE
439
+ If this flag is set, then io_uring supports sane assignment of files for SQEs
440
+ that have dependencies. For example, if a chain of SQEs are submitted with
441
+ .B IOSQE_IO_LINK,
442
+ then kernels without this flag will prepare the file for each link upfront.
443
+ If a previous link opens a file with a known index, eg if direct descriptors
444
+ are used with open or accept, then file assignment needs to happen post
445
+ execution of that SQE. If this flag is set, then the kernel will defer
446
+ file assignment until execution of a given request is started. Available since
447
+ kernel 5.17.
340
448
 
341
449
  .PP
342
450
  The rest of the fields in the
@@ -486,11 +594,9 @@ or
486
594
  .BR io_uring_enter (2)
487
595
  system calls.
488
596
 
489
- On error,
490
- .B -1
491
- is returned and
597
+ On error, a negative error code is returned. The caller should not rely on
492
598
  .I errno
493
- is set appropriately.
599
+ variable.
494
600
  .PP
495
601
  .SH ERRORS
496
602
  .TP
@@ -2,24 +2,30 @@
2
2
  .\"
3
3
  .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
4
  .\"
5
- .TH io_uring_sq_ready "January 25, 2022" "liburing-2.1" "liburing Manual"
5
+ .TH io_uring_sq_ready 3 "January 25, 2022" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_sq_ready - number of unconsumed or unsubmitted entries in the SQ ring
7
+ io_uring_sq_ready \- number of unconsumed or unsubmitted entries in the SQ ring
8
8
  .SH SYNOPSIS
9
9
  .nf
10
- .BR "#include <liburing.h>"
10
+ .B #include <liburing.h>
11
11
  .PP
12
- .BI "unsigned io_uring_sq_ready(const struct io_uring *ring)"
12
+ .BI "unsigned io_uring_sq_ready(const struct io_uring *" ring ");"
13
13
  .fi
14
- .PP
15
14
  .SH DESCRIPTION
16
15
  .PP
17
- The io_uring_sq_ready() function retuns the number of unconsumed (if SQPOLL) or
18
- unsubmitted entries that exist in the SQ ring belonging to the
16
+ The
17
+ .BR io_uring_sq_ready (3)
18
+ function returns the number of unconsumed (if SQPOLL) or unsubmitted entries
19
+ that exist in the SQ ring belonging to the
19
20
  .I ring
20
21
  param.
21
22
 
23
+ Usage of this function only applies if the ring has been setup with
24
+ .B IORING_SETUP_SQPOLL,
25
+ where request submissions, and hence consumption from the SQ ring, happens
26
+ through a polling thread.
27
+
22
28
  .SH RETURN VALUE
23
29
  Returns the number of unconsumed or unsubmitted entries in the SQ ring.
24
30
  .SH SEE ALSO
25
- .BR io_uring_cq_ready (3)
31
+ .BR io_uring_cq_ready (3)
@@ -2,24 +2,24 @@
2
2
  .\"
3
3
  .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
4
  .\"
5
- .TH io_uring_sq_space-left "January 25, 2022" "liburing-2.1" "liburing Manual"
5
+ .TH io_uring_sq_space-left 3 "January 25, 2022" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_sq_space_left - free space in the SQ ring
7
+ io_uring_sq_space_left \- free space in the SQ ring
8
8
  .SH SYNOPSIS
9
9
  .nf
10
- .BR "#include <liburing.h>"
10
+ .B #include <liburing.h>
11
11
  .PP
12
- .BI "unsigned io_uring_sq_space_left(const struct io_uring *ring)"
12
+ .BI "unsigned io_uring_sq_space_left(const struct io_uring *" ring ");"
13
13
  .fi
14
- .PP
15
14
  .SH DESCRIPTION
16
15
  .PP
17
- The io_uring_sq_space_left() function retuns how much space is left in the
18
- SQ ring belonging to the
16
+ The
17
+ .BR io_uring_sq_space_left (3)
18
+ function returns how much space is left in the SQ ring belonging to the
19
19
  .I ring
20
20
  param.
21
21
 
22
22
  .SH RETURN VALUE
23
- Returns the free space in the SQ ring.
23
+ Returns the number of availables entries in the SQ ring.
24
24
  .SH SEE ALSO
25
- .BR io_uring_sq_ready (3)
25
+ .BR io_uring_sq_ready (3)
@@ -4,27 +4,45 @@
4
4
  .\"
5
5
  .TH io_uring_sqe_set_data 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_sqe_set_data - set user data for submission queue event
7
+ io_uring_sqe_set_data \- set user data for submission queue event
8
8
  .SH SYNOPSIS
9
9
  .nf
10
- .BR "#include <liburing.h>"
10
+ .B #include <liburing.h>
11
11
  .PP
12
- .BI "void io_uring_sqe_set_data(struct io_uring_sqe *sqe,"
13
- .BI " void *user_data)"
12
+ .BI "void io_uring_sqe_set_data(struct io_uring_sqe *" sqe ","
13
+ .BI " void *" user_data ");"
14
+ .BI "
15
+ .BI "void io_uring_sqe_set_data64(struct io_uring_sqe *" sqe ","
16
+ .BI " __u64 " data ");"
14
17
  .fi
15
- .PP
16
18
  .SH DESCRIPTION
17
19
  .PP
18
- The io_uring_sqe_set_data() function stores a
20
+ The
21
+ .BR io_uring_sqe_set_data (3)
22
+ function stores a
19
23
  .I user_data
20
24
  pointer with the submission queue entry
21
- .I sqe.
25
+ .IR sqe .
26
+
27
+ The
28
+ .BR io_uring_sqe_set_data64 (3)
29
+ function stores a 64-bit
30
+ .I data
31
+ value with the submission queue entry
32
+ .IR sqe .
22
33
 
23
- After the caller has requested an submission queue entry (SQE) with io_uring_get_sqe(),
24
- he can associate a data pointer with the SQE. Once the completion arrives, the
25
- function io_uring_cqe_get_data() can be called to identify the user request.
34
+ After the caller has requested a submission queue entry (SQE) with
35
+ .BR io_uring_get_sqe (3) ,
36
+ they can associate a data pointer or value with the SQE. Once the completion
37
+ arrives, the function
38
+ .BR io_uring_cqe_get_data (3)
39
+ or
40
+ .BR io_uring_cqe_get_data64 (3)
41
+ can be called to retrieve the data pointer or value associated with the
42
+ submitted request.
26
43
 
27
44
  .SH RETURN VALUE
28
45
  None
29
46
  .SH SEE ALSO
30
- .BR io_uring_get_sqe (3), io_uring_cqe_get_data (3)
47
+ .BR io_uring_get_sqe (3),
48
+ .BR io_uring_cqe_get_data (3)
@@ -0,0 +1 @@
1
+ io_uring_sqe_set_data.3
@@ -2,21 +2,22 @@
2
2
  .\"
3
3
  .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
4
  .\"
5
- .TH io_uring_sqe_set_flags "January 25, 2022" "liburing-2.1" "liburing Manual"
5
+ .TH io_uring_sqe_set_flags 3 "January 25, 2022" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_sqe_set_flags - set flags for submission queue entry
7
+ io_uring_sqe_set_flags \- set flags for submission queue entry
8
8
  .SH SYNOPSIS
9
9
  .nf
10
- .BR "#include <liburing.h>"
10
+ .B #include <liburing.h>
11
11
  .PP
12
- .BI "void io_uring_sqe_set_flags(struct io_uring_sqe *sqe,"
13
- .BI " unsigned flags)"
12
+ .BI "void io_uring_sqe_set_flags(struct io_uring_sqe *" sqe ","
13
+ .BI " unsigned " flags ");"
14
14
  .fi
15
- .PP
16
15
  .SH DESCRIPTION
17
16
  .PP
18
- The io_uring_sqe_set_flags() function allows the caller to change the
19
- behavior of the submission queue entry by specifying flags. It enables the
17
+ The
18
+ .BR io_uring_sqe_set_flags (3)
19
+ function allows the caller to change the behavior of the submission queue entry
20
+ by specifying flags. It enables the
20
21
  .I flags
21
22
  belonging to the
22
23
  .I sqe
@@ -34,7 +35,10 @@ Normal operation for io_uring is to try and issue an sqe as non-blocking first,
34
35
  and if that fails, execute it in an async manner. To support more efficient
35
36
  overlapped operation of requests that the application knows/assumes will
36
37
  always (or most of the time) block, the application can ask for an sqe to be
37
- issued async from the start.
38
+ issued async from the start. Note that this flag immediately causes the SQE
39
+ to be offloaded to an async helper thread with no initial non-blocking attempt.
40
+ This may be less efficient and should not be used liberally or without
41
+ understanding the performance and efficiency tradeoffs.
38
42
  .TP
39
43
  .B IOSQE_IO_LINK
40
44
  When this flag is specified, the SQE forms a link with the next SQE in the
@@ -46,15 +50,38 @@ last SQE in a submission has this flag set, it will still terminate the current
46
50
  chain. This flag has no effect on previous SQE submissions, nor does it impact
47
51
  SQEs that are outside of the chain tail. This means that multiple chains can be
48
52
  executing in parallel, or chains and individual SQEs. Only members inside the
49
- chain are serialized. A chain of SQEs will be broken, if any request in that
53
+ chain are serialized. A chain of SQEs will be broken if any request in that
50
54
  chain ends in error.
51
55
  .TP
56
+ .B IOSQE_IO_HARDLINK
57
+ Like
58
+ .B IOSQE_IO_LINK ,
59
+ except the links aren't severed if an error or unexpected result occurs.
60
+ .TP
52
61
  .B IOSQE_IO_DRAIN
53
62
  When this flag is specified, the SQE will not be started before previously
54
63
  submitted SQEs have completed, and new SQEs will not be started before this
55
64
  one completes.
65
+ .TP
66
+ .B IOSQE_CQE_SKIP_SUCCESS
67
+ Request that no CQE be generated for this request, if it completes successfully.
68
+ This can be useful in cases where the application doesn't need to know when
69
+ a specific request completed, if it completed successfully.
70
+ .TP
71
+ .B IOSQE_BUFFER_SELECT
72
+ If set, and if the request types supports it, select an IO buffer from the
73
+ indicated buffer group. This can be used with requests that read or receive
74
+ data from a file or socket, where buffer selection is deferred until the kernel
75
+ is ready to transfer data, instead of when the IO is originally submitted. The
76
+ application must also set the
77
+ .I buf_group
78
+ field in the SQE, indicating which previously registered buffer group to select
79
+ a buffer from.
56
80
 
57
81
  .SH RETURN VALUE
58
82
  None
59
83
  .SH SEE ALSO
60
- .BR io_uring_submit (3), io_uring_register(3)
84
+ .BR io_uring_submit (3),
85
+ .BR io_uring_register (3)
86
+ .BR io_uring_register_buffers (3)
87
+ .BR io_uring_register_buf_ring (3)
@@ -2,29 +2,33 @@
2
2
  .\"
3
3
  .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
4
  .\"
5
- .TH io_uring_sqring_wait "January 25, 2022" "liburing-2.1" "liburing Manual"
5
+ .TH io_uring_sqring_wait 3 "January 25, 2022" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_sqring_wait - wait for free space in the SQ ring
7
+ io_uring_sqring_wait \- wait for free space in the SQ ring
8
8
  .SH SYNOPSIS
9
9
  .nf
10
- .BR "#include <liburing.h>"
10
+ .B #include <liburing.h>
11
11
  .PP
12
- .BI "int io_uring_sqring_wait(struct io_uring *ring)"
12
+ .BI "int io_uring_sqring_wait(struct io_uring *" ring ");"
13
13
  .fi
14
- .PP
15
14
  .SH DESCRIPTION
16
15
  .PP
17
- The function io_uring_sqring_wait() allows the caller to wait for space
18
- to free up in the SQ ring belonging to the
16
+ The function
17
+ .BR io_uring_sqring_wait (3)
18
+ allows the caller to wait for space to free up in the SQ ring belonging to the
19
19
  .I ring
20
20
  param, which happens when the kernel side thread
21
21
  has consumed one or more entries. If the SQ ring is currently non-full,
22
22
  no action is taken.
23
23
 
24
- This feature can only be used when SQPOLL is enabled.
24
+ This feature can only be used when the ring has been setup with
25
+ .B IORING_SETUP_SQPOLL
26
+ and hence is using an offloaded approach to request submissions.
25
27
 
26
28
  .SH RETURN VALUE
27
29
  On success it returns the free space. If the kernel does not support the
28
30
  feature, -EINVAL is returned.
29
31
  .SH SEE ALSO
30
- .BR io_uring_submit (3), io_uring_wait_cqe (3), io_uring_wait_cqes (3)
32
+ .BR io_uring_submit (3),
33
+ .BR io_uring_wait_cqe (3),
34
+ .BR io_uring_wait_cqes (3)
@@ -4,26 +4,43 @@
4
4
  .\"
5
5
  .TH io_uring_submit 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_submit - submit requests to the submission queue
8
- .fi
7
+ io_uring_submit \- submit requests to the submission queue
9
8
  .SH SYNOPSIS
10
9
  .nf
11
- .BR "#include <liburing.h>"
12
- .PP
13
- .BI "int io_uring_submit(struct io_uring *ring)"
10
+ .B #include <liburing.h>
14
11
  .PP
12
+ .BI "int io_uring_submit(struct io_uring *" ring ");"
13
+ .fi
15
14
  .SH DESCRIPTION
16
15
  .PP
17
- The io_uring_submit() function submits the next events to the submission
18
- queue belonging to the
19
- .I ring.
16
+ The
17
+ .BR io_uring_submit (3)
18
+ function submits the next events to the submission queue belonging to the
19
+ .IR ring .
20
20
 
21
- After the caller retrieves a submission queue entry (SQE) with io_uring_get_sqe(),
22
- prepares the SQE, it can be submitted with io_uring_submit().
21
+ After the caller retrieves a submission queue entry (SQE) with
22
+ .BR io_uring_get_sqe (3)
23
+ and prepares the SQE using one of the provided helpers, it can be submitted with
24
+ .BR io_uring_submit (3) .
23
25
 
24
26
  .SH RETURN VALUE
25
27
  On success
26
28
  .BR io_uring_submit (3)
27
- returns the number of submitted submission queue entries. On failure it returns -errno.
29
+ returns the number of submitted submission queue entries. On failure it returns
30
+ .BR -errno .
31
+ .SH NOTES
32
+ For any request that passes in data in a struct, that data must remain
33
+ valid until the request has been successfully submitted. It need not remain
34
+ valid until completion. Once a request has been submitted, the in-kernel
35
+ state is stable. Very early kernels (5.4 and earlier) required state to be
36
+ stable until the completion occurred. Applications can test for this
37
+ behavior by inspecting the
38
+ .B IORING_FEAT_SUBMIT_STABLE
39
+ flag passed back from
40
+ .BR io_uring_queue_init_params (3).
41
+ In general, the man pages for the individual prep helpers will have a note
42
+ mentioning this fact as well, if required for the given command.
28
43
  .SH SEE ALSO
29
- .BR io_uring_get_sqe (3), io_uring_submit_and_wait (3), io_uring_submit_and_wait_timeout (3)
44
+ .BR io_uring_get_sqe (3),
45
+ .BR io_uring_submit_and_wait (3),
46
+ .BR io_uring_submit_and_wait_timeout (3)
@@ -0,0 +1,31 @@
1
+ .\" Copyright (C), 2022 dylany
2
+ .\" You may distribute this file under the terms of the GNU Free
3
+ .\" Documentation License.
4
+ .TH io_uring_submit_and_get_events 3 "September 5, 2022" "liburing-2.3" "liburing Manual"
5
+ .SH NAME
6
+ io_uring_submit_and_get_events \- submit requests to the submission queue and flush completions
7
+ .SH SYNOPSIS
8
+ .nf
9
+ .B #include <liburing.h>
10
+ .PP
11
+ .BI "int io_uring_submit_and_get_events(struct io_uring *" ring ");"
12
+ .fi
13
+
14
+ .SH DESCRIPTION
15
+ The
16
+ .BR io_uring_submit_and_get_events (3)
17
+ function submits the next events to the submission queue as with
18
+ .BR io_uring_submit (3) .
19
+ After submission it will flush CQEs as with
20
+ .BR io_uring_get_events (3) .
21
+
22
+ The benefit of this function is that it does both with only one system call.
23
+
24
+ .SH RETURN VALUE
25
+ On success
26
+ .BR io_uring_submit_and_get_events (3)
27
+ returns the number of submitted submission queue entries. On failure it returns
28
+ .BR -errno .
29
+ .SH SEE ALSO
30
+ .BR io_uring_submit (3),
31
+ .BR io_uring_get_events (3)
@@ -4,31 +4,35 @@
4
4
  .\"
5
5
  .TH io_uring_submit_and_wait 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_submit_and_wait - submit requests to the submission queue and wait for completion
8
- .fi
7
+ io_uring_submit_and_wait \- submit requests to the submission queue and wait for completion
9
8
  .SH SYNOPSIS
10
9
  .nf
11
- .BR "#include <liburing.h>"
10
+ .B #include <liburing.h>
12
11
  .PP
13
- .BI "int io_uring_submit_and_wait(struct io_uring *ring,"
12
+ .BI "int io_uring_submit_and_wait(struct io_uring *" ring ","
13
+ .BI " unsigned " wait_nr ");"
14
14
  .fi
15
- .BI " unsigned wait_nr)"
16
- .PP
17
15
  .SH DESCRIPTION
18
16
  .PP
19
- The io_uring_submit_and_wait() function submits the next events to the submission
20
- queue belonging to the
17
+ The
18
+ .BR io_uring_submit_and_wait (3)
19
+ function submits the next requests from the submission queue belonging to the
21
20
  .I ring
22
21
  and waits for
23
22
  .I wait_nr
24
23
  completion events.
25
24
 
26
- After the caller retrieves a submission queue entry (SQE) with io_uring_get_sqe(),
27
- prepares the SQE, it can be submitted with io_uring_submit_and_wait().
25
+ After the caller retrieves a submission queue entry (SQE) with
26
+ .BR io_uring_get_sqe (3)
27
+ and prepares the SQE, it can be submitted with
28
+ .BR io_uring_submit_and_wait (3) .
28
29
 
29
30
  .SH RETURN VALUE
30
31
  On success
31
32
  .BR io_uring_submit_and_wait (3)
32
- returns the number of submitted submission queue entries. On failure it returns -errno.
33
+ returns the number of submitted submission queue entries. On failure it returns
34
+ .BR -errno .
33
35
  .SH SEE ALSO
34
- .BR io_uring_get_sqe (3), io_uring_submit (3), io_uring_submit_and_wait_timeout (3)
36
+ .BR io_uring_get_sqe (3),
37
+ .BR io_uring_submit (3),
38
+ .BR io_uring_submit_and_wait_timeout (3)
@@ -4,46 +4,53 @@
4
4
  .\"
5
5
  .TH io_uring_submit_and_wait_timeout 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_submit_and_wait_timeout - submit requests to the submission queue and
7
+ io_uring_submit_and_wait_timeout \- submit requests to the submission queue and
8
8
  wait for the completion with timeout
9
- .fi
10
9
  .SH SYNOPSIS
11
10
  .nf
12
- .BR "#include <liburing.h>"
11
+ .B #include <liburing.h>
13
12
  .PP
14
- .BI "int io_uring_submit_and_wait_timeout(struct io_uring *ring,"
15
- .fi
16
- .BI " struct io_uring_cqe **cqe_ptr,"
17
- .fi
18
- .BI " unsigned wait_nr,"
13
+ .BI "int io_uring_submit_and_wait_timeout(struct io_uring *" ring ","
14
+ .BI " struct io_uring_cqe **" cqe_ptr ","
15
+ .BI " unsigned " wait_nr ","
16
+ .BI " struct __kernel_timespec *" ts ","
17
+ .BI " sigset_t *" sigmask ");"
19
18
  .fi
20
- .BI " struct __kernel_timespec *ts,"
21
- .fi
22
- .BI " sigset_t *sigmask)"
23
- .PP
24
19
  .SH DESCRIPTION
25
20
  .PP
26
- The io_uring_submit_and_wait_timeout() function submits the next events to the submission
27
- queue belonging to the
21
+ The
22
+ .BR io_uring_submit_and_wait_timeout (3)
23
+ function submits the next requests from the submission queue belonging to the
28
24
  .I ring
29
25
  and waits for
30
26
  .I wait_nr
31
- completion events or until the timeout
27
+ completion events, or until the timeout
32
28
  .I ts
33
- expires.The completion events are stored in the
34
- .I cqe_ptr array.
35
- The
29
+ expires. The completion events are stored in the
30
+ .I cqe_ptr
31
+ array. The
36
32
  .I sigmask
37
33
  specifies the set of signals to block. The prevailing signal mask is restored
38
34
  before returning.
39
35
 
40
- After the caller retrieves a submission queue entry (SQE) with io_uring_get_sqe(),
41
- prepares the SQE, it can be submitted with io_uring_submit_and_wait_timeout().
42
-
36
+ After the caller retrieves a submission queue entry (SQE) with
37
+ .BR io_uring_get_sqe (3)
38
+ and prepares the SQE, it can be submitted with
39
+ .BR io_uring_submit_and_wait_timeout (3) .
43
40
 
44
41
  .SH RETURN VALUE
45
42
  On success
46
43
  .BR io_uring_submit_and_wait_timeout (3)
47
- returns the number of submitted submission queue entries. On failure it returns -errno.
44
+ returns the number of submitted submission queue entries. On failure it returns
45
+ .BR -errno .
46
+ Note that in earlier versions of the liburing library, the return value was 0
47
+ on success.
48
+ The most common failure case is not receiving a completion within the specified
49
+ timeout,
50
+ .B -ETIME
51
+ is returned in this case.
48
52
  .SH SEE ALSO
49
- .BR io_uring_get_sqe (3), io_uring_submit (3), io_uring_submit_and_wait (3), io_uring_wait_cqe (3)
53
+ .BR io_uring_get_sqe (3),
54
+ .BR io_uring_submit (3),
55
+ .BR io_uring_submit_and_wait (3),
56
+ .BR io_uring_wait_cqe (3)