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
@@ -0,0 +1,25 @@
1
+ .\" Copyright (C) 2022 Dylan Yudaken <dylany@fb.com>
2
+ .\"
3
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
+ .\"
5
+ .TH io_uring_cq_has_overflow 3 "September 5, 2022" "liburing-2.3" "liburing Manual"
6
+ .SH NAME
7
+ io_uring_cq_has_overflow \- returns if there are overflow entries waiting to move to the CQ ring
8
+ .SH SYNOPSIS
9
+ .nf
10
+ .B #include <liburing.h>
11
+ .PP
12
+ .BI "bool io_uring_cq_has_overflow(const struct io_uring *" ring ");"
13
+ .fi
14
+ .SH DESCRIPTION
15
+ .PP
16
+ The
17
+ .BR io_uring_cq_has_overflow (3)
18
+ function informs the application if CQ entries have overflowed and are waiting to be flushed to
19
+ the CQ ring. For example using
20
+ .BR io_uring_get_events (3)
21
+ .
22
+ .SH RETURN VALUE
23
+ True if there are CQ entries waiting to be flushed to the CQ ring.
24
+ .SH SEE ALSO
25
+ .BR io_uring_get_events (3)
@@ -2,24 +2,25 @@
2
2
  .\"
3
3
  .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
4
  .\"
5
- .TH io_uring_cq_ready "January 25, 2022" "liburing-2.1" "liburing Manual"
5
+ .TH io_uring_cq_ready 3 "January 25, 2022" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_cq_ready - number of unconsumed ready entries in the CQ ring
7
+ io_uring_cq_ready \- returns number of unconsumed ready entries in the CQ 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_cq_ready(const struct io_uring *ring)"
12
+ .BI "unsigned io_uring_cq_ready(const struct io_uring *" ring ");"
13
13
  .fi
14
- .PP
15
14
  .SH DESCRIPTION
16
15
  .PP
17
- The io_uring_cq_ready() function retuns the number of unconsumed entries that
18
- are ready belonging to the
16
+ The
17
+ .BR io_uring_cq_ready (3)
18
+ function returns the number of unconsumed entries that are ready belonging to the
19
19
  .I ring
20
20
  param.
21
21
 
22
22
  .SH RETURN VALUE
23
23
  Returns the number of unconsumed ready entries in the CQ ring.
24
24
  .SH SEE ALSO
25
- .BR io_uring_submit (3), io_uring_wait_cqe (3)
25
+ .BR io_uring_submit (3),
26
+ .BR io_uring_wait_cqe (3)
@@ -4,31 +4,50 @@
4
4
  .\"
5
5
  .TH io_uring_cqe_get_data 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_cqe_get_data - get user data for completion event
7
+ io_uring_cqe_get_data \- get user data for completion 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_cqe_get_data(struct io_uring_cqe *cqe)"
12
+ .BI "void *io_uring_cqe_get_data(struct io_uring_cqe *" cqe ");"
13
+ .BI "
14
+ .BI "__u64 io_uring_cqe_get_data64(struct io_uring_cqe *" cqe ");"
13
15
  .fi
14
- .PP
15
16
  .SH DESCRIPTION
16
17
  .PP
17
- The io_uring_cqe_get_data() function returns the user_data
18
- with the completion queue entry
19
- .I cqe.
18
+ The
19
+ .BR io_uring_cqe_get_data (3)
20
+ function returns the user_data with the completion queue entry
21
+ .IR cqe
22
+ as a data pointer.
23
+
24
+ The
25
+ .BR io_uring_cqe_get_data64 (3)
26
+ function returns the user_data with the completion queue entry
27
+ .IR cqe
28
+ as a 64-bit data value.
20
29
 
21
- After the caller has received a completion queue entry (CQE) with io_uring_wait_cqe(),
22
- he can call he io_uring_cqe_get_data() function to retrieve the
30
+ After the caller has received a completion queue entry (CQE) with
31
+ .BR io_uring_wait_cqe (3),
32
+ the application can call
33
+ .BR io_uring_cqe_get_data (3)
34
+ or
35
+ .BR io_uring_cqe_get_data64 (3)
36
+ function to retrieve the
23
37
  .I user_data
24
38
  value. This requires that
25
39
  .I user_data
26
- has been set earlier with the function io_uring_sqe_set_data().
40
+ has been set earlier with the function
41
+ .BR io_uring_sqe_set_data (3)
42
+ or
43
+ .BR io_uring_sqe_set_data64 (3).
27
44
 
28
45
  .SH RETURN VALUE
29
46
  If the
30
47
  .I user_data
31
- value has been set before submitting the request, it will be returned. Otherwise
32
- the functions returns NULL.
48
+ value has been set before submitting the request, it will be returned.
49
+ Otherwise the functions returns NULL.
33
50
  .SH SEE ALSO
34
- .BR io_uring_get_sqe (3), io_uring_sqe_set_data (3), io_uring_sqe_submit(3)
51
+ .BR io_uring_get_sqe (3),
52
+ .BR io_uring_sqe_set_data (3),
53
+ .BR io_uring_sqe_submit (3)
@@ -0,0 +1 @@
1
+ io_uring_cqe_get_data.3
@@ -4,29 +4,39 @@
4
4
  .\"
5
5
  .TH io_uring_cqe_seen 3 "November 15, 2021" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_cqe_seen - Mark io_uring completion event as processed
7
+ io_uring_cqe_seen \- mark io_uring completion event as consumed
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_cqe_seen(struct io_uring *ring,"
13
- .BI " struct io_uring_cqe *cqe)"
12
+ .BI "void io_uring_cqe_seen(struct io_uring *" ring ","
13
+ .BI " struct io_uring_cqe *" cqe ");"
14
14
  .fi
15
- .PP
16
15
  .SH DESCRIPTION
17
16
  .PP
18
- The io_uring_cqe_seen() function marks the IO completion
17
+ The
18
+ .BR io_uring_cqe_seen (3)
19
+ function marks the IO completion
19
20
  .I cqe
20
21
  belonging to the
21
22
  .I ring
22
- param as processed.
23
+ param as consumed.
23
24
 
24
- After the caller has submitted a request with io_uring_submit(), he can retrieve
25
- the completion with io_uring_wait_cqe() and mark it then as processed with
26
- io_uring_cqe_seen().
25
+ After the caller has submitted a request with
26
+ .BR io_uring_submit (3),
27
+ the application can retrieve the completion with
28
+ .BR io_uring_wait_cqe (3),
29
+ .BR io_uring_peek_cqe (3),
30
+ or any of the other CQE retrieval helpers, and mark it as consumed with
31
+ .BR io_uring_cqe_seen (3).
27
32
 
28
- Completions must be marked as completed, so their slot can get reused.
33
+ Completions must be marked as completed so their slot can get reused.
29
34
  .SH RETURN VALUE
30
35
  None
31
36
  .SH SEE ALSO
32
- .BR io_uring_submit (3), io_uring_wait_cqe(3)
37
+ .BR io_uring_submit (3),
38
+ .BR io_uring_wait_cqe (3),
39
+ .BR io_uring_peek_cqe (3),
40
+ .BR io_uring_wait_cqes (3),
41
+ .BR io_uring_wait_cqe_timeout (3),
42
+ .BR io_uring_cqe_seen (3)
@@ -3,27 +3,31 @@
3
3
  .\"
4
4
  .\" SPDX-License-Identifier: LGPL-2.0-or-later
5
5
  .\"
6
- .TH IO_URING_ENTER 2 2019-01-22 "Linux" "Linux Programmer's Manual"
6
+ .TH io_uring_enter 2 2019-01-22 "Linux" "Linux Programmer's Manual"
7
7
  .SH NAME
8
8
  io_uring_enter \- initiate and/or complete asynchronous I/O
9
9
  .SH SYNOPSIS
10
10
  .nf
11
- .BR "#include <linux/io_uring.h>"
11
+ .BR "#include <liburing.h>"
12
12
  .PP
13
13
  .BI "int io_uring_enter(unsigned int " fd ", unsigned int " to_submit ,
14
14
  .BI " unsigned int " min_complete ", unsigned int " flags ,
15
15
  .BI " sigset_t *" sig );
16
+ .PP
17
+ .BI "int io_uring_enter2(unsigned int " fd ", unsigned int " to_submit ,
18
+ .BI " unsigned int " min_complete ", unsigned int " flags ,
19
+ .BI " sigset_t *" sig ", size_t " sz );
16
20
  .fi
17
21
  .PP
18
22
  .SH DESCRIPTION
19
23
  .PP
20
- .BR io_uring_enter ()
24
+ .BR io_uring_enter (2)
21
25
  is used to initiate and complete I/O using the shared submission and
22
26
  completion queues setup by a call to
23
27
  .BR io_uring_setup (2).
24
28
  A single call can both submit new I/O and wait for completions of I/O
25
29
  initiated by this call or previous calls to
26
- .BR io_uring_enter ().
30
+ .BR io_uring_enter (2).
27
31
 
28
32
  .I fd
29
33
  is the file descriptor returned by
@@ -34,7 +38,7 @@ specifies the number of I/Os to submit from the submission queue.
34
38
  is a bitmask of the following values:
35
39
  .TP
36
40
  .B IORING_ENTER_GETEVENTS
37
- If this flag is set, then the system call will wait for the specificied
41
+ If this flag is set, then the system call will wait for the specified
38
42
  number of events in
39
43
  .I min_complete
40
44
  before returning. This flag can be set along with
@@ -61,12 +65,12 @@ Since kernel 5.11, the system calls arguments have been modified to look like
61
65
  the following:
62
66
 
63
67
  .nf
64
- .BI "int io_uring_enter(unsigned int " fd ", unsigned int " to_submit ,
65
- .BI " unsigned int " min_complete ", unsigned int " flags ,
66
- .BI " const void *" arg ", size_t " argsz );
68
+ .BI "int io_uring_enter2(unsigned int " fd ", unsigned int " to_submit ,
69
+ .BI " unsigned int " min_complete ", unsigned int " flags ,
70
+ .BI " const void *" arg ", size_t " argsz );
67
71
  .fi
68
72
 
69
- which is behaves just like the original definition by default. However, if
73
+ which behaves just like the original definition by default. However, if
70
74
  .B IORING_ENTER_EXT_ARG
71
75
  is set, then instead of a
72
76
  .I sigset_t
@@ -93,6 +97,13 @@ is set to a valid pointer, then this time value indicates the timeout for
93
97
  waiting on events. If an application is waiting on events and wishes to
94
98
  stop waiting after a specified amount of time, then this can be accomplished
95
99
  directly in version 5.11 and newer by using this feature.
100
+ .TP
101
+ .B IORING_ENTER_REGISTERED_RING
102
+ If the ring file descriptor has been registered through use of
103
+ .B IORING_REGISTER_RING_FDS,
104
+ then setting this flag will tell the kernel that the
105
+ .I ring_fd
106
+ passed in is the registered ring offset rather than a normal file descriptor.
96
107
 
97
108
  .PP
98
109
  .PP
@@ -130,12 +141,12 @@ is a pointer to a signal mask (see
130
141
  if
131
142
  .I sig
132
143
  is not NULL,
133
- .BR io_uring_enter ()
144
+ .BR io_uring_enter (2)
134
145
  first replaces the current signal mask by the one pointed to by
135
146
  .IR sig ,
136
147
  then waits for events to become available in the completion queue, and
137
148
  then restores the original signal mask. The following
138
- .BR io_uring_enter ()
149
+ .BR io_uring_enter (2)
139
150
  call:
140
151
  .PP
141
152
  .in +4n
@@ -242,7 +253,7 @@ and
242
253
  .BR pwritev2 (2).
243
254
  If the file is not seekable,
244
255
  .I off
245
- must be set to zero.
256
+ must be set to zero or -1.
246
257
 
247
258
  .TP
248
259
  .B IORING_OP_READ_FIXED
@@ -383,12 +394,46 @@ holds the flags associated with the system call. See also
383
394
  .BR sendmsg (2)
384
395
  for the general description of the related system call. Available since 5.3.
385
396
 
397
+ This command also supports the following modifiers in
398
+ .I ioprio:
399
+
400
+ .PP
401
+ .in +12
402
+ .B IORING_RECVSEND_POLL_FIRST
403
+ If set, io_uring will assume the socket is currently full and attempting to
404
+ send data will be unsuccessful. For this case, io_uring will arm internal
405
+ poll and trigger a send of the data when there is enough space available.
406
+ This initial send attempt can be wasteful for the case where the socket
407
+ is expected to be full, setting this flag will bypass the initial send
408
+ attempt and go straight to arming poll. If poll does indicate that data can
409
+ be sent, the operation will proceed.
410
+ .EE
411
+ .in
412
+ .PP
413
+
386
414
  .TP
387
415
  .B IORING_OP_RECVMSG
388
416
  Works just like IORING_OP_SENDMSG, except for
389
417
  .BR recvmsg(2)
390
418
  instead. See the description of IORING_OP_SENDMSG. Available since 5.3.
391
419
 
420
+ This command also supports the following modifiers in
421
+ .I ioprio:
422
+
423
+ .PP
424
+ .in +12
425
+ .B IORING_RECVSEND_POLL_FIRST
426
+ If set, io_uring will assume the socket is currently empty and attempting to
427
+ receive data will be unsuccessful. For this case, io_uring will arm internal
428
+ poll and trigger a receive of the data when the socket has data to be read.
429
+ This initial receive attempt can be wasteful for the case where the socket
430
+ is expected to be empty, setting this flag will bypass the initial receive
431
+ attempt and go straight to arming poll. If poll does indicate that data is
432
+ ready to be received, the operation will proceed.
433
+ .EE
434
+ .in
435
+ .PP
436
+
392
437
  .TP
393
438
  .B IORING_OP_SEND
394
439
  Issue the equivalent of a
@@ -405,12 +450,46 @@ holds the flags associated with the system call. See also
405
450
  .BR send(2)
406
451
  for the general description of the related system call. Available since 5.6.
407
452
 
453
+ This command also supports the following modifiers in
454
+ .I ioprio:
455
+
456
+ .PP
457
+ .in +12
458
+ .B IORING_RECVSEND_POLL_FIRST
459
+ If set, io_uring will assume the socket is currently full and attempting to
460
+ send data will be unsuccessful. For this case, io_uring will arm internal
461
+ poll and trigger a send of the data when there is enough space available.
462
+ This initial send attempt can be wasteful for the case where the socket
463
+ is expected to be full, setting this flag will bypass the initial send
464
+ attempt and go straight to arming poll. If poll does indicate that data can
465
+ be sent, the operation will proceed.
466
+ .EE
467
+ .in
468
+ .PP
469
+
408
470
  .TP
409
471
  .B IORING_OP_RECV
410
472
  Works just like IORING_OP_SEND, except for
411
473
  .BR recv(2)
412
474
  instead. See the description of IORING_OP_SEND. Available since 5.6.
413
475
 
476
+ This command also supports the following modifiers in
477
+ .I ioprio:
478
+
479
+ .PP
480
+ .in +12
481
+ .B IORING_RECVSEND_POLL_FIRST
482
+ If set, io_uring will assume the socket is currently empty and attempting to
483
+ receive data will be unsuccessful. For this case, io_uring will arm internal
484
+ poll and trigger a receive of the data when the socket has data to be read.
485
+ This initial receive attempt can be wasteful for the case where the socket
486
+ is expected to be empty, setting this flag will bypass the initial receive
487
+ attempt and go straight to arming poll. If poll does indicate that data is
488
+ ready to be received, the operation will proceed.
489
+ .EE
490
+ .in
491
+ .PP
492
+
414
493
  .TP
415
494
  .B IORING_OP_TIMEOUT
416
495
  This command will register a timeout operation. The
@@ -434,7 +513,7 @@ clock source. The request will complete with
434
513
  if the timeout got completed through expiration of the timer, or
435
514
  .I 0
436
515
  if the timeout got completed through requests completing on their own. If
437
- the timeout was cancelled before it expired, the request will complete with
516
+ the timeout was canceled before it expired, the request will complete with
438
517
  .I -ECANCELED.
439
518
  Available since 5.4.
440
519
 
@@ -453,7 +532,7 @@ suspend while having a timeout request in-flight.
453
532
 
454
533
  .B IORING_TIMEOUT_REALTIME
455
534
  If set, then the clocksource used is
456
- .I CLOCK_BOOTTIME
535
+ .I CLOCK_REALTIME
457
536
  instead of
458
537
  .I CLOCK_MONOTONIC.
459
538
  .EE
@@ -469,7 +548,7 @@ operation.
469
548
  must contain the
470
549
  .I user_data
471
550
  field of the previously issued timeout operation. If the specified timeout
472
- request is found and cancelled successfully, this request will terminate
551
+ request is found and canceled successfully, this request will terminate
473
552
  with a result value of
474
553
  .I 0
475
554
  If the timeout request was found but expiration was already in progress,
@@ -535,16 +614,16 @@ Attempt to cancel an already issued request.
535
614
  .I addr
536
615
  must contain the
537
616
  .I user_data
538
- field of the request that should be cancelled. The cancellation request will
617
+ field of the request that should be canceled. The cancelation request will
539
618
  complete with one of the following results codes. If found, the
540
619
  .I res
541
620
  field of the cqe will contain 0. If not found,
542
621
  .I res
543
- will contain -ENOENT. If found and attempted cancelled, the
622
+ will contain -ENOENT. If found and attempted canceled, the
544
623
  .I res
545
624
  field will contain -EALREADY. In this case, the request may or may not
546
625
  terminate. In general, requests that are interruptible (like socket IO) will
547
- get cancelled, while disk IO requests cannot be cancelled if already started.
626
+ get canceled, while disk IO requests cannot be canceled if already started.
548
627
  Available since 5.5.
549
628
 
550
629
  .TP
@@ -562,9 +641,9 @@ If used, the timeout specified in the command will cancel the linked command,
562
641
  unless the linked command completes before the timeout. The timeout will
563
642
  complete with
564
643
  .I -ETIME
565
- if the timer expired and the linked request was attempted cancelled, or
644
+ if the timer expired and the linked request was attempted canceled, or
566
645
  .I -ECANCELED
567
- if the timer got cancelled because of completion of the linked request. Like
646
+ if the timer got canceled because of completion of the linked request. Like
568
647
  .B IORING_OP_TIMEOUT
569
648
  the clock source used is
570
649
  .B CLOCK_MONOTONIC
@@ -778,7 +857,7 @@ contains the read or write offset. If
778
857
  .I fd
779
858
  does not refer to a seekable file,
780
859
  .I off
781
- must be set to zero. If
860
+ must be set to zero or -1. If
782
861
  .I offs
783
862
  is set to
784
863
  .B -1
@@ -1045,9 +1124,124 @@ set, and a
1045
1124
  field matching the
1046
1125
  .I off
1047
1126
  value being passed in. This request type can be used to either just wake or
1048
- interrupt anyone waiting for completions on the target ring, ot it can be used
1127
+ interrupt anyone waiting for completions on the target ring, or it can be used
1049
1128
  to pass messages via the two fields. Available since 5.18.
1050
1129
 
1130
+ .TP
1131
+ .B IORING_OP_SOCKET
1132
+ Issue the equivalent of a
1133
+ .BR socket(2)
1134
+ system call.
1135
+ .I fd
1136
+ must contain the communication domain,
1137
+ .I off
1138
+ must contain the communication type,
1139
+ .I len
1140
+ must contain the protocol, and
1141
+ .I rw_flags
1142
+ is currently unused and must be set to zero. See also
1143
+ .BR socket(2)
1144
+ for the general description of the related system call. Available since 5.19.
1145
+
1146
+ If the
1147
+ .I file_index
1148
+ field is set to a positive number, the file won't be installed into the
1149
+ normal file table as usual but will be placed into the fixed file table at index
1150
+ .I file_index - 1.
1151
+ In this case, instead of returning a file descriptor, the result will contain
1152
+ either 0 on success or an error. If the index points to a valid empty slot, the
1153
+ installation is guaranteed to not fail. If there is already a file in the slot,
1154
+ it will be replaced, similar to
1155
+ .B IORING_OP_FILES_UPDATE.
1156
+ Please note that only io_uring has access to such files and no other syscall
1157
+ can use them. See
1158
+ .B IOSQE_FIXED_FILE
1159
+ and
1160
+ .B IORING_REGISTER_FILES.
1161
+
1162
+ Available since 5.19.
1163
+
1164
+ .TP
1165
+ .B IORING_OP_SEND_ZC
1166
+ Issue the zerocopy equivalent of a
1167
+ .BR send(2)
1168
+ system call. Similar to IORING_OP_SEND, but tries to avoid making intermediate
1169
+ copies of data. Zerocopy execution is not guaranteed and may fall back to
1170
+ copying. The request may also fail with
1171
+ .B -EOPNOTSUPP ,
1172
+ when a protocol doesn't support zerocopy, in which case users are recommended
1173
+ to use copying sends instead.
1174
+
1175
+ The
1176
+ .I flags
1177
+ field of the first
1178
+ .I "struct io_uring_cqe"
1179
+ may likely contain
1180
+ .B IORING_CQE_F_MORE ,
1181
+ which means that there will be a second completion event / notification for
1182
+ the request, with the
1183
+ .I user_data
1184
+ field set to the same value. The user must not modify the data buffer until the
1185
+ notification is posted. The first cqe follows the usual rules and so its
1186
+ .I res
1187
+ field will contain the number of bytes sent or a negative error code. The
1188
+ notification's
1189
+ .I res
1190
+ field will be set to zero and the
1191
+ .I flags
1192
+ field will contain
1193
+ .B IORING_CQE_F_NOTIF .
1194
+ The two step model is needed because the kernel may hold on to buffers for a
1195
+ long time, e.g. waiting for a TCP ACK, and having a separate cqe for request
1196
+ completions allows userspace to push more data without extra delays. Note,
1197
+ notifications are only responsible for controlling the lifetime of the buffers,
1198
+ and as such don't mean anything about whether the data has atually been sent
1199
+ out or received by the other end. Even errored requests may generate a
1200
+ notification, and the user must check for
1201
+ .B IORING_CQE_F_MORE
1202
+ rather than relying on the result.
1203
+
1204
+ .I fd
1205
+ must be set to the socket file descriptor,
1206
+ .I addr
1207
+ must contain a pointer to the buffer,
1208
+ .I len
1209
+ denotes the length of the buffer to send, and
1210
+ .I msg_flags
1211
+ holds the flags associated with the system call. When
1212
+ .I addr2
1213
+ is non-zero it points to the address of the target with
1214
+ .I addr_len
1215
+ specifying its size, turning the request into a
1216
+ .BR sendto(2)
1217
+ system call equivalent.
1218
+
1219
+ Available since 6.0.
1220
+
1221
+ This command also supports the following modifiers in
1222
+ .I ioprio:
1223
+
1224
+ .PP
1225
+ .in +12
1226
+ .B IORING_RECVSEND_POLL_FIRST
1227
+ If set, io_uring will assume the socket is currently full and attempting to
1228
+ send data will be unsuccessful. For this case, io_uring will arm internal
1229
+ poll and trigger a send of the data when there is enough space available.
1230
+ This initial send attempt can be wasteful for the case where the socket
1231
+ is expected to be full, setting this flag will bypass the initial send
1232
+ attempt and go straight to arming poll. If poll does indicate that data can
1233
+ be sent, the operation will proceed.
1234
+
1235
+ .B IORING_RECVSEND_FIXED_BUF
1236
+ If set, instructs io_uring to use a pre-mapped buffer. The
1237
+ .I buf_index
1238
+ field should contain an index into an array of fixed buffers. See
1239
+ .BR io_uring_register (2)
1240
+ for details on how to setup a context for fixed buffer I/O.
1241
+ .EE
1242
+ .in
1243
+ .PP
1244
+
1051
1245
  .PP
1052
1246
  The
1053
1247
  .I flags
@@ -1131,12 +1325,12 @@ opcode specific and is the same as with breaking chains of
1131
1325
  One special case is when the request has a linked timeout, then the CQE
1132
1326
  generation for the linked timeout is decided solely by whether it has
1133
1327
  .B IOSQE_CQE_SKIP_SUCCESS
1134
- set, regardless whether it timed out or was cancelled. In other words, if a
1328
+ set, regardless whether it timed out or was canceled. In other words, if a
1135
1329
  linked timeout has the flag set, it's guaranteed to not post a CQE.
1136
1330
 
1137
1331
  The semantics are chosen to accommodate several use cases. First, when all but
1138
1332
  the last request of a normal link without linked timeouts are marked with the
1139
- flag, only one CQE per lin is posted. Additionally, it enables supression of
1333
+ flag, only one CQE per lin is posted. Additionally, it enables suppression of
1140
1334
  CQEs in cases where the side effects of a successfully executed operation is
1141
1335
  enough for userspace to know the state of the system. One such example would
1142
1336
  be writing to a synchronisation file.
@@ -1247,7 +1441,9 @@ is used for certain commands, like
1247
1441
  .B IORING_OP_POLL_ADD
1248
1442
  or in conjunction with
1249
1443
  .B IOSQE_BUFFER_SELECT
1250
- , see those entries.
1444
+ or
1445
+ .B IORING_OP_MSG_RING,
1446
+ , see those entries for details.
1251
1447
  .I res
1252
1448
  is the operation-specific result, but io_uring-specific errors
1253
1449
  (e.g. flags or opcode invalid) are returned through this field.
@@ -1273,7 +1469,7 @@ in the matching man page for that type, or in the opcodes section above for
1273
1469
  io_uring-specific opcodes.
1274
1470
  .PP
1275
1471
  .SH RETURN VALUE
1276
- .BR io_uring_enter ()
1472
+ .BR io_uring_enter (2)
1277
1473
  returns the number of I/Os successfully consumed. This can be zero
1278
1474
  if
1279
1475
  .I to_submit
@@ -1290,15 +1486,14 @@ completion queue entry (see section
1290
1486
  rather than through the system call itself.
1291
1487
 
1292
1488
  Errors that occur not on behalf of a submission queue entry are returned via the
1293
- system call directly. On such an error,
1294
- .B -1
1295
- is returned and
1489
+ system call directly. On such an error, a negative error code is returned. The
1490
+ caller should not rely on
1296
1491
  .I errno
1297
- is set appropriately.
1492
+ variable.
1298
1493
  .PP
1299
1494
  .SH ERRORS
1300
1495
  These are the errors returned by
1301
- .BR io_uring_enter ()
1496
+ .BR io_uring_enter (2)
1302
1497
  system call.
1303
1498
  .TP
1304
1499
  .B EAGAIN
@@ -1317,8 +1512,30 @@ is a valid file descriptor, but the io_uring ring is not in the right state
1317
1512
  .BR io_uring_register (2)
1318
1513
  for details on how to enable the ring.
1319
1514
  .TP
1515
+ .B EBADR
1516
+ At least one CQE was dropped even with the
1517
+ .B IORING_FEAT_NODROP
1518
+ feature, and there are no otherwise available CQEs. This clears the error state
1519
+ and so with no other changes the next call to
1520
+ .BR io_uring_setup (2)
1521
+ will not have this error. This error should be extremely rare and indicates the
1522
+ machine is running critically low on memory and. It may be reasonable for the
1523
+ application to terminate running unless it is able to safely handle any CQE
1524
+ being lost.
1525
+ .TP
1526
+ .B EBUSY
1527
+ If the
1528
+ .B IORING_FEAT_NODROP
1529
+ feature flag is set, then
1320
1530
  .B EBUSY
1321
- The application is attempting to overcommit the number of requests it can have
1531
+ will be returned if there were overflow entries,
1532
+ .B IORING_ENTER_GETEVENTS
1533
+ flag is set and not all of the overflow entries were able to be flushed to
1534
+ the CQ ring.
1535
+
1536
+ Without
1537
+ .B IORING_FEAT_NODROP
1538
+ the application is attempting to overcommit the number of requests it can have
1322
1539
  pending. The application should wait for some completions and try again. May
1323
1540
  occur if the application tries to queue more requests than we have room for in
1324
1541
  the CQ ring, or if the application attempts to wait for more events without
@@ -0,0 +1 @@
1
+ io_uring_enter.2
@@ -2,23 +2,26 @@
2
2
  .\"
3
3
  .\" SPDX-License-Identifier: LGPL-2.0-or-later
4
4
  .\"
5
- .TH io_uring_free_probe "January 25, 2022" "liburing-2.1" "liburing Manual"
5
+ .TH io_uring_free_probe 3 "January 25, 2022" "liburing-2.1" "liburing Manual"
6
6
  .SH NAME
7
- io_uring_free_probe - free probe instance
7
+ io_uring_free_probe \- free probe instance
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_free_probe(struct io_uring_probe *probe)"
12
+ .BI "void io_uring_free_probe(struct io_uring_probe *" probe ");"
13
13
  .fi
14
- .PP
15
14
  .SH DESCRIPTION
16
15
  .PP
17
- The function io_uring_free_probe() frees the
16
+ The function
17
+ .BR io_uring_free_probe (3)
18
+ frees the
18
19
  .I probe
19
- instance allocated with the io_uring_get_probe() function.
20
+ instance allocated with the
21
+ .BR io_uring_get_probe (3)
22
+ function.
20
23
 
21
24
  .SH RETURN VALUE
22
25
  None
23
26
  .SH SEE ALSO
24
- .BR io_uring_get_probe (3)
27
+ .BR io_uring_get_probe (3)