@nxtedition/rocksdb 5.2.36 → 5.2.39

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 (190) hide show
  1. package/binding.cc +66 -91
  2. package/deps/liburing/liburing/COPYING +502 -0
  3. package/deps/liburing/liburing/COPYING.GPL +339 -0
  4. package/deps/liburing/liburing/LICENSE +7 -0
  5. package/deps/liburing/liburing/Makefile +84 -0
  6. package/deps/liburing/liburing/Makefile.quiet +11 -0
  7. package/deps/liburing/liburing/README +46 -0
  8. package/deps/liburing/liburing/configure +420 -0
  9. package/deps/liburing/liburing/debian/README.Debian +7 -0
  10. package/deps/liburing/liburing/debian/changelog +27 -0
  11. package/deps/liburing/liburing/debian/compat +1 -0
  12. package/deps/liburing/liburing/debian/control +48 -0
  13. package/deps/liburing/liburing/debian/copyright +49 -0
  14. package/deps/liburing/liburing/debian/liburing-dev.install +4 -0
  15. package/deps/liburing/liburing/debian/liburing-dev.manpages +6 -0
  16. package/deps/liburing/liburing/debian/liburing1-udeb.install +1 -0
  17. package/deps/liburing/liburing/debian/liburing1.install +1 -0
  18. package/deps/liburing/liburing/debian/liburing1.symbols +32 -0
  19. package/deps/liburing/liburing/debian/patches/series +1 -0
  20. package/deps/liburing/liburing/debian/rules +81 -0
  21. package/deps/liburing/liburing/debian/source/format +1 -0
  22. package/deps/liburing/liburing/debian/source/local-options +2 -0
  23. package/deps/liburing/liburing/debian/source/options +1 -0
  24. package/deps/liburing/liburing/debian/watch +3 -0
  25. package/deps/liburing/liburing/examples/Makefile +29 -0
  26. package/deps/liburing/liburing/examples/io_uring-cp.c +279 -0
  27. package/deps/liburing/liburing/examples/io_uring-test.c +112 -0
  28. package/deps/liburing/liburing/examples/link-cp.c +193 -0
  29. package/deps/liburing/liburing/examples/ucontext-cp.c +273 -0
  30. package/deps/liburing/liburing/liburing.pc.in +12 -0
  31. package/deps/liburing/liburing/liburing.spec +66 -0
  32. package/deps/liburing/liburing/make-debs.sh +53 -0
  33. package/deps/liburing/liburing/man/io_uring.7 +736 -0
  34. package/deps/liburing/liburing/man/io_uring_enter.2 +1403 -0
  35. package/deps/liburing/liburing/man/io_uring_get_sqe.3 +37 -0
  36. package/deps/liburing/liburing/man/io_uring_queue_exit.3 +27 -0
  37. package/deps/liburing/liburing/man/io_uring_queue_init.3 +44 -0
  38. package/deps/liburing/liburing/man/io_uring_register.2 +605 -0
  39. package/deps/liburing/liburing/man/io_uring_setup.2 +515 -0
  40. package/deps/liburing/liburing/src/Makefile +76 -0
  41. package/deps/liburing/liburing/src/include/liburing/barrier.h +73 -0
  42. package/deps/liburing/liburing/src/include/liburing/io_uring.h +422 -0
  43. package/deps/liburing/liburing/src/include/liburing.h +775 -0
  44. package/deps/liburing/liburing/src/liburing.map +46 -0
  45. package/deps/liburing/liburing/src/queue.c +403 -0
  46. package/deps/liburing/liburing/src/register.c +299 -0
  47. package/deps/liburing/liburing/src/setup.c +356 -0
  48. package/deps/liburing/liburing/src/syscall.c +73 -0
  49. package/deps/liburing/liburing/src/syscall.h +20 -0
  50. package/deps/liburing/liburing/test/232c93d07b74-test.c +305 -0
  51. package/deps/liburing/liburing/test/35fa71a030ca-test.c +329 -0
  52. package/deps/liburing/liburing/test/500f9fbadef8-test.c +89 -0
  53. package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +93 -0
  54. package/deps/liburing/liburing/test/8a9973408177-test.c +106 -0
  55. package/deps/liburing/liburing/test/917257daa0fe-test.c +53 -0
  56. package/deps/liburing/liburing/test/Makefile +312 -0
  57. package/deps/liburing/liburing/test/a0908ae19763-test.c +58 -0
  58. package/deps/liburing/liburing/test/a4c0b3decb33-test.c +180 -0
  59. package/deps/liburing/liburing/test/accept-link.c +251 -0
  60. package/deps/liburing/liburing/test/accept-reuse.c +164 -0
  61. package/deps/liburing/liburing/test/accept-test.c +79 -0
  62. package/deps/liburing/liburing/test/accept.c +476 -0
  63. package/deps/liburing/liburing/test/across-fork.c +283 -0
  64. package/deps/liburing/liburing/test/b19062a56726-test.c +53 -0
  65. package/deps/liburing/liburing/test/b5837bd5311d-test.c +77 -0
  66. package/deps/liburing/liburing/test/ce593a6c480a-test.c +135 -0
  67. package/deps/liburing/liburing/test/close-opath.c +122 -0
  68. package/deps/liburing/liburing/test/config +10 -0
  69. package/deps/liburing/liburing/test/connect.c +398 -0
  70. package/deps/liburing/liburing/test/cq-full.c +96 -0
  71. package/deps/liburing/liburing/test/cq-overflow.c +294 -0
  72. package/deps/liburing/liburing/test/cq-peek-batch.c +102 -0
  73. package/deps/liburing/liburing/test/cq-ready.c +94 -0
  74. package/deps/liburing/liburing/test/cq-size.c +58 -0
  75. package/deps/liburing/liburing/test/d4ae271dfaae-test.c +96 -0
  76. package/deps/liburing/liburing/test/d77a67ed5f27-test.c +65 -0
  77. package/deps/liburing/liburing/test/defer.c +307 -0
  78. package/deps/liburing/liburing/test/double-poll-crash.c +186 -0
  79. package/deps/liburing/liburing/test/eeed8b54e0df-test.c +114 -0
  80. package/deps/liburing/liburing/test/empty-eownerdead.c +42 -0
  81. package/deps/liburing/liburing/test/eventfd-disable.c +151 -0
  82. package/deps/liburing/liburing/test/eventfd-ring.c +97 -0
  83. package/deps/liburing/liburing/test/eventfd.c +112 -0
  84. package/deps/liburing/liburing/test/fadvise.c +202 -0
  85. package/deps/liburing/liburing/test/fallocate.c +249 -0
  86. package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +138 -0
  87. package/deps/liburing/liburing/test/file-register.c +843 -0
  88. package/deps/liburing/liburing/test/file-update.c +173 -0
  89. package/deps/liburing/liburing/test/files-exit-hang-poll.c +128 -0
  90. package/deps/liburing/liburing/test/files-exit-hang-timeout.c +134 -0
  91. package/deps/liburing/liburing/test/fixed-link.c +90 -0
  92. package/deps/liburing/liburing/test/fsync.c +224 -0
  93. package/deps/liburing/liburing/test/hardlink.c +136 -0
  94. package/deps/liburing/liburing/test/helpers.c +135 -0
  95. package/deps/liburing/liburing/test/helpers.h +67 -0
  96. package/deps/liburing/liburing/test/io-cancel.c +537 -0
  97. package/deps/liburing/liburing/test/io_uring_enter.c +296 -0
  98. package/deps/liburing/liburing/test/io_uring_register.c +664 -0
  99. package/deps/liburing/liburing/test/io_uring_setup.c +192 -0
  100. package/deps/liburing/liburing/test/iopoll.c +366 -0
  101. package/deps/liburing/liburing/test/lfs-openat-write.c +117 -0
  102. package/deps/liburing/liburing/test/lfs-openat.c +273 -0
  103. package/deps/liburing/liburing/test/link-timeout.c +1107 -0
  104. package/deps/liburing/liburing/test/link.c +496 -0
  105. package/deps/liburing/liburing/test/link_drain.c +229 -0
  106. package/deps/liburing/liburing/test/madvise.c +195 -0
  107. package/deps/liburing/liburing/test/mkdir.c +108 -0
  108. package/deps/liburing/liburing/test/multicqes_drain.c +383 -0
  109. package/deps/liburing/liburing/test/nop-all-sizes.c +107 -0
  110. package/deps/liburing/liburing/test/nop.c +115 -0
  111. package/deps/liburing/liburing/test/open-close.c +146 -0
  112. package/deps/liburing/liburing/test/openat2.c +240 -0
  113. package/deps/liburing/liburing/test/personality.c +204 -0
  114. package/deps/liburing/liburing/test/pipe-eof.c +81 -0
  115. package/deps/liburing/liburing/test/pipe-reuse.c +105 -0
  116. package/deps/liburing/liburing/test/poll-cancel-ton.c +139 -0
  117. package/deps/liburing/liburing/test/poll-cancel.c +135 -0
  118. package/deps/liburing/liburing/test/poll-link.c +227 -0
  119. package/deps/liburing/liburing/test/poll-many.c +208 -0
  120. package/deps/liburing/liburing/test/poll-mshot-update.c +273 -0
  121. package/deps/liburing/liburing/test/poll-ring.c +48 -0
  122. package/deps/liburing/liburing/test/poll-v-poll.c +353 -0
  123. package/deps/liburing/liburing/test/poll.c +109 -0
  124. package/deps/liburing/liburing/test/probe.c +137 -0
  125. package/deps/liburing/liburing/test/read-write.c +876 -0
  126. package/deps/liburing/liburing/test/register-restrictions.c +633 -0
  127. package/deps/liburing/liburing/test/rename.c +134 -0
  128. package/deps/liburing/liburing/test/ring-leak.c +173 -0
  129. package/deps/liburing/liburing/test/ring-leak2.c +249 -0
  130. package/deps/liburing/liburing/test/rsrc_tags.c +449 -0
  131. package/deps/liburing/liburing/test/runtests-loop.sh +16 -0
  132. package/deps/liburing/liburing/test/runtests.sh +170 -0
  133. package/deps/liburing/liburing/test/rw_merge_test.c +97 -0
  134. package/deps/liburing/liburing/test/self.c +91 -0
  135. package/deps/liburing/liburing/test/send_recv.c +291 -0
  136. package/deps/liburing/liburing/test/send_recvmsg.c +345 -0
  137. package/deps/liburing/liburing/test/sendmsg_fs_cve.c +198 -0
  138. package/deps/liburing/liburing/test/shared-wq.c +84 -0
  139. package/deps/liburing/liburing/test/short-read.c +75 -0
  140. package/deps/liburing/liburing/test/shutdown.c +163 -0
  141. package/deps/liburing/liburing/test/sigfd-deadlock.c +74 -0
  142. package/deps/liburing/liburing/test/socket-rw-eagain.c +156 -0
  143. package/deps/liburing/liburing/test/socket-rw.c +147 -0
  144. package/deps/liburing/liburing/test/splice.c +511 -0
  145. package/deps/liburing/liburing/test/sq-full-cpp.cc +45 -0
  146. package/deps/liburing/liburing/test/sq-full.c +45 -0
  147. package/deps/liburing/liburing/test/sq-poll-dup.c +200 -0
  148. package/deps/liburing/liburing/test/sq-poll-kthread.c +168 -0
  149. package/deps/liburing/liburing/test/sq-poll-share.c +137 -0
  150. package/deps/liburing/liburing/test/sq-space_left.c +159 -0
  151. package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +159 -0
  152. package/deps/liburing/liburing/test/sqpoll-disable-exit.c +195 -0
  153. package/deps/liburing/liburing/test/sqpoll-exit-hang.c +77 -0
  154. package/deps/liburing/liburing/test/sqpoll-sleep.c +68 -0
  155. package/deps/liburing/liburing/test/statx.c +172 -0
  156. package/deps/liburing/liburing/test/stdout.c +232 -0
  157. package/deps/liburing/liburing/test/submit-link-fail.c +154 -0
  158. package/deps/liburing/liburing/test/submit-reuse.c +239 -0
  159. package/deps/liburing/liburing/test/symlink.c +116 -0
  160. package/deps/liburing/liburing/test/teardowns.c +58 -0
  161. package/deps/liburing/liburing/test/thread-exit.c +131 -0
  162. package/deps/liburing/liburing/test/timeout-new.c +246 -0
  163. package/deps/liburing/liburing/test/timeout-overflow.c +204 -0
  164. package/deps/liburing/liburing/test/timeout.c +1354 -0
  165. package/deps/liburing/liburing/test/unlink.c +111 -0
  166. package/deps/liburing/liburing/test/wakeup-hang.c +162 -0
  167. package/deps/liburing/liburing.gyp +20 -0
  168. package/deps/rocksdb/rocksdb/db/corruption_test.cc +62 -0
  169. package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -62
  170. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +25 -11
  171. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +74 -155
  172. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -2
  173. package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
  174. package/deps/rocksdb/rocksdb/env/fs_posix.cc +13 -0
  175. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +4 -2
  176. package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +22 -4
  177. package/deps/rocksdb/rocksdb/file/prefetch_test.cc +5 -0
  178. package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +15 -0
  179. package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +5 -0
  180. package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
  181. package/deps/rocksdb/rocksdb/monitoring/statistics.cc +3 -0
  182. package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +3 -7
  183. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +2 -1
  184. package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +44 -29
  185. package/deps/rocksdb/rocksdb.gyp +4 -3
  186. package/package.json +1 -1
  187. package/prebuilds/darwin-arm64/node.napi.node +0 -0
  188. package/prebuilds/darwin-x64/node.napi.node +0 -0
  189. package/prebuilds/linux-x64/node.napi.node +0 -0
  190. package/prebuilds/prebuilds/linux-x64/node.napi.node +0 -0
@@ -0,0 +1,37 @@
1
+ .\" Copyright (C) 2020 Jens Axboe <axboe@kernel.dk>
2
+ .\" Copyright (C) 2020 Red Hat, Inc.
3
+ .\"
4
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
5
+ .\"
6
+ .TH io_uring_get_sqe 3 "July 10, 2020" "liburing-0.7" "liburing Manual"
7
+ .SH NAME
8
+ io_uring_get_sqe - get the next vacant event from the submission queue
9
+ .SH SYNOPSIS
10
+ .nf
11
+ .BR "#include <liburing.h>"
12
+ .PP
13
+ .BI "struct io_uring_sqe *io_uring_get_sqe(struct io_uring " *ring );
14
+ .fi
15
+ .PP
16
+ .SH DESCRIPTION
17
+ .PP
18
+ The io_uring_get_sqe() function gets the next vacant event from the submission
19
+ queue belonging to the
20
+ .I ring
21
+ param.
22
+
23
+ On success io_uring_get_sqe() returns a pointer to the submission queue event.
24
+ On failure NULL is returned.
25
+
26
+ If a submission queue event is returned, it should be filled out via one of the
27
+ prep functions such as
28
+ .BR io_uring_prep_read (3)
29
+ and submitted via
30
+ .BR io_uring_submit (3).
31
+
32
+ .SH RETURN VALUE
33
+ .BR io_uring_get_sqe (3)
34
+ returns a pointer to the next submission queue event on success and NULL on
35
+ failure.
36
+ .SH SEE ALSO
37
+ .BR io_uring_submit (3)
@@ -0,0 +1,27 @@
1
+ .\" Copyright (C) 2020 Jens Axboe <axboe@kernel.dk>
2
+ .\" Copyright (C) 2020 Red Hat, Inc.
3
+ .\"
4
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
5
+ .\"
6
+ .TH io_uring_queue_exit 3 "July 10, 2020" "liburing-0.7" "liburing Manual"
7
+ .SH NAME
8
+ io_uring_queue_exit - tear down io_uring submission and completion queues
9
+ .SH SYNOPSIS
10
+ .nf
11
+ .BR "#include <liburing.h>"
12
+ .PP
13
+ .BI "void io_uring_queue_exit(struct io_uring * ring );"
14
+ .fi
15
+ .PP
16
+ .SH DESCRIPTION
17
+ .PP
18
+ .BR io_uring_queue_exit (3)
19
+ will release all resources acquired and initialized by
20
+ .BR io_uring_queue_init (3).
21
+ It first unmaps the memory shared between the application and the kernel and then closes the io_uring file descriptor.
22
+ .SH RETURN VALUE
23
+ None
24
+ .SH SEE ALSO
25
+ .BR io_uring_setup (2),
26
+ .BR mmap (2),
27
+ .BR io_uring_queue_init (3)
@@ -0,0 +1,44 @@
1
+ .\" Copyright (C) 2020 Jens Axboe <axboe@kernel.dk>
2
+ .\" Copyright (C) 2020 Red Hat, Inc.
3
+ .\"
4
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
5
+ .\"
6
+ .TH io_uring_queue_init 3 "July 10, 2020" "liburing-0.7" "liburing Manual"
7
+ .SH NAME
8
+ io_uring_queue_init - setup io_uring submission and completion queues
9
+ .SH SYNOPSIS
10
+ .nf
11
+ .BR "#include <liburing.h>"
12
+ .PP
13
+ .BI "int io_uring_queue_init(unsigned " entries ", struct io_uring *" ring ,
14
+ .BI " unsigned " flags );
15
+ .fi
16
+ .PP
17
+ .SH DESCRIPTION
18
+ .PP
19
+ The io_uring_queue_init() function executes the io_uring_setup syscall to
20
+ initialize the submission and completion queues in the kernel with at least
21
+ .I entries
22
+ entries and then maps the resulting file descriptor to memory shared between the
23
+ application and the kernel.
24
+
25
+ On success io_uring_queue_init() returns 0 and
26
+ .I ring
27
+ will point to the shared memory containing the io_uring queues. On failure
28
+ -errno is returned.
29
+
30
+ .I flags
31
+ will be passed through to the io_uring_setup syscall (see
32
+ .BR io_uring_setup (2)).
33
+
34
+ On success, the resources held by
35
+ .I ring
36
+ should be released via a corresponding call to
37
+ .BR io_uring_queue_exit (3).
38
+ .SH RETURN VALUE
39
+ .BR io_uring_queue_init (3)
40
+ returns 0 on success and -errno on failure.
41
+ .SH SEE ALSO
42
+ .BR io_uring_setup (2),
43
+ .BR mmap (2),
44
+ .BR io_uring_queue_exit (3)
@@ -0,0 +1,605 @@
1
+ .\" Copyright (C) 2019 Jens Axboe <axboe@kernel.dk>
2
+ .\" Copyright (C) 2019 Red Hat, Inc.
3
+ .\"
4
+ .\" SPDX-License-Identifier: LGPL-2.0-or-later
5
+ .\"
6
+ .TH IO_URING_REGISTER 2 2019-01-17 "Linux" "Linux Programmer's Manual"
7
+ .SH NAME
8
+ io_uring_register \- register files or user buffers for asynchronous I/O
9
+ .SH SYNOPSIS
10
+ .nf
11
+ .BR "#include <linux/io_uring.h>"
12
+ .PP
13
+ .BI "int io_uring_register(unsigned int " fd ", unsigned int " opcode ,
14
+ .BI " void *" arg ", unsigned int " nr_args );
15
+ .fi
16
+ .PP
17
+ .SH DESCRIPTION
18
+ .PP
19
+
20
+ The
21
+ .BR io_uring_register ()
22
+ system call registers resources (e.g. user buffers, files, eventfd,
23
+ personality, restrictions) for use in an
24
+ .BR io_uring (7)
25
+ instance referenced by
26
+ .IR fd .
27
+ Registering files or user buffers allows the kernel to take long term
28
+ references to internal data structures or create long term mappings of
29
+ application memory, greatly reducing per-I/O overhead.
30
+
31
+ .I fd
32
+ is the file descriptor returned by a call to
33
+ .BR io_uring_setup (2).
34
+ .I opcode
35
+ can be one of:
36
+
37
+ .TP
38
+ .B IORING_REGISTER_BUFFERS
39
+ .I arg
40
+ points to a
41
+ .I struct iovec
42
+ array of
43
+ .I nr_args
44
+ entries. The buffers associated with the iovecs will be locked in
45
+ memory and charged against the user's
46
+ .B RLIMIT_MEMLOCK
47
+ resource limit. See
48
+ .BR getrlimit (2)
49
+ for more information. Additionally, there is a size limit of 1GiB per
50
+ buffer. Currently, the buffers must be anonymous, non-file-backed
51
+ memory, such as that returned by
52
+ .BR malloc (3)
53
+ or
54
+ .BR mmap (2)
55
+ with the
56
+ .B MAP_ANONYMOUS
57
+ flag set. It is expected that this limitation will be lifted in the
58
+ future. Huge pages are supported as well. Note that the entire huge
59
+ page will be pinned in the kernel, even if only a portion of it is
60
+ used.
61
+
62
+ After a successful call, the supplied buffers are mapped into the
63
+ kernel and eligible for I/O. To make use of them, the application
64
+ must specify the
65
+ .B IORING_OP_READ_FIXED
66
+ or
67
+ .B IORING_OP_WRITE_FIXED
68
+ opcodes in the submission queue entry (see the
69
+ .I struct io_uring_sqe
70
+ definition in
71
+ .BR io_uring_enter (2)),
72
+ and set the
73
+ .I buf_index
74
+ field to the desired buffer index. The memory range described by the
75
+ submission queue entry's
76
+ .I addr
77
+ and
78
+ .I len
79
+ fields must fall within the indexed buffer.
80
+
81
+ It is perfectly valid to setup a large buffer and then only use part
82
+ of it for an I/O, as long as the range is within the originally mapped
83
+ region.
84
+
85
+ An application can increase or decrease the size or number of
86
+ registered buffers by first unregistering the existing buffers, and
87
+ then issuing a new call to
88
+ .BR io_uring_register ()
89
+ with the new buffers.
90
+
91
+ Note that before 5.13 registering buffers would wait for the ring to idle.
92
+ If the application currently has requests in-flight, the registration will
93
+ wait for those to finish before proceeding.
94
+
95
+ An application need not unregister buffers explicitly before shutting
96
+ down the io_uring instance. Available since 5.1.
97
+
98
+ .TP
99
+ .B IORING_REGISTER_BUFFERS2
100
+ Register buffers for I/O. Similar to
101
+ .B IORING_REGISTER_BUFFERS
102
+ but aims to have a more extensible ABI.
103
+
104
+ .I arg
105
+ points to a
106
+ .I struct io_uring_rsrc_register,
107
+ and
108
+ .I nr_args
109
+ should be set to the number of bytes in the structure.
110
+
111
+ .PP
112
+ .in +8n
113
+ .EX
114
+ struct io_uring_rsrc_register {
115
+ __u32 nr;
116
+ __u32 resv;
117
+ __u64 resv2;
118
+ __aligned_u64 data;
119
+ __aligned_u64 tags;
120
+ };
121
+
122
+ .EE
123
+ .in
124
+ .PP
125
+
126
+ .in +8n
127
+
128
+ The
129
+ .I data
130
+ field contains a pointer to a
131
+ .I struct iovec
132
+ array of
133
+ .I nr
134
+ entries.
135
+ The
136
+ .I tags
137
+ field should either be 0, then tagging is disabled, or point to an array
138
+ of
139
+ .I nr
140
+ "tags" (unsigned 64 bit integers). If a tag is zero, then tagging for this
141
+ particular resource (a buffer in this case) is disabled. Otherwise, after the
142
+ resource had been unregistered and it's not used anymore, a CQE will be
143
+ posted with
144
+ .I user_data
145
+ set to the specified tag and all other fields zeroed.
146
+
147
+ Note that resource updates, e.g.
148
+ .B IORING_REGISTER_BUFFERS_UPDATE,
149
+ don't necessarily deallocate resources by the time it returns, but they might
150
+ be held alive until all requests using it complete.
151
+
152
+ Available since 5.13.
153
+
154
+ .TP
155
+ .B IORING_REGISTER_BUFFERS_UPDATE
156
+ Updates registered buffers with new ones, either turning a sparse entry into
157
+ a real one, or replacing an existing entry.
158
+
159
+ .I arg
160
+ must contain a pointer to a struct io_uring_rsrc_update2, which contains
161
+ an offset on which to start the update, and an array of
162
+ .I struct iovec.
163
+ .I tags
164
+ points to an array of tags.
165
+ .I nr
166
+ must contain the number of descriptors in the passed in arrays.
167
+ See
168
+ .B IORING_REGISTER_BUFFERS2
169
+ for the resource tagging description.
170
+
171
+ .PP
172
+ .in +8n
173
+ .EX
174
+
175
+ struct io_uring_rsrc_update2 {
176
+ __u32 offset;
177
+ __u32 resv;
178
+ __aligned_u64 data;
179
+ __aligned_u64 tags;
180
+ __u32 nr;
181
+ __u32 resv2;
182
+ };
183
+ .EE
184
+ .in
185
+ .PP
186
+
187
+ .in +8n
188
+
189
+ Available since 5.13.
190
+
191
+ .TP
192
+ .B IORING_UNREGISTER_BUFFERS
193
+ This operation takes no argument, and
194
+ .I arg
195
+ must be passed as NULL. All previously registered buffers associated
196
+ with the io_uring instance will be released. Available since 5.1.
197
+
198
+ .TP
199
+ .B IORING_REGISTER_FILES
200
+ Register files for I/O.
201
+ .I arg
202
+ contains a pointer to an array of
203
+ .I nr_args
204
+ file descriptors (signed 32 bit integers).
205
+
206
+ To make use of the registered files, the
207
+ .B IOSQE_FIXED_FILE
208
+ flag must be set in the
209
+ .I flags
210
+ member of the
211
+ .IR "struct io_uring_sqe" ,
212
+ and the
213
+ .I fd
214
+ member is set to the index of the file in the file descriptor array.
215
+
216
+ The file set may be sparse, meaning that the
217
+ .B fd
218
+ field in the array may be set to
219
+ .B -1.
220
+ See
221
+ .B IORING_REGISTER_FILES_UPDATE
222
+ for how to update files in place.
223
+
224
+ Note that before 5.13 registering files would wait for the ring to idle.
225
+ If the application currently has requests in-flight, the registration will
226
+ wait for those to finish before proceeding. See
227
+ .B IORING_REGISTER_FILES_UPDATE
228
+ for how to update an existing set without that limitation.
229
+
230
+ Files are automatically unregistered when the io_uring instance is
231
+ torn down. An application needs only unregister if it wishes to
232
+ register a new set of fds. Available since 5.1.
233
+
234
+ .TP
235
+ .B IORING_REGISTER_FILES2
236
+ Register files for I/O. Similar to
237
+ .B IORING_REGISTER_FILES.
238
+
239
+ .I arg
240
+ points to a
241
+ .I struct io_uring_rsrc_register,
242
+ and
243
+ .I nr_args
244
+ should be set to the number of bytes in the structure.
245
+
246
+ The
247
+ .I data
248
+ field contains a pointer to an array of
249
+ .I nr
250
+ file descriptors (signed 32 bit integers).
251
+ .I tags
252
+ field should either be 0 or or point to an array of
253
+ .I nr
254
+ "tags" (unsigned 64 bit integers). See
255
+ .B IORING_REGISTER_BUFFERS2
256
+ for more info on resource tagging.
257
+
258
+ Note that resource updates, e.g.
259
+ .B IORING_REGISTER_FILES_UPDATE,
260
+ don't necessarily deallocate resources, they might be held until all requests
261
+ using that resource complete.
262
+
263
+ Available since 5.13.
264
+
265
+ .TP
266
+ .B IORING_REGISTER_FILES_UPDATE
267
+ This operation replaces existing files in the registered file set with new
268
+ ones, either turning a sparse entry (one where fd is equal to -1) into a
269
+ real one, removing an existing entry (new one is set to -1), or replacing
270
+ an existing entry with a new existing entry.
271
+
272
+ .I arg
273
+ must contain a pointer to a
274
+ .I struct io_uring_files_update,
275
+ which contains
276
+ an offset on which to start the update, and an array of file descriptors to
277
+ use for the update.
278
+ .I nr_args
279
+ must contain the number of descriptors in the passed in array. Available
280
+ since 5.5.
281
+
282
+ File descriptors can be skipped if they are set to
283
+ .B IORING_REGISTER_FILES_SKIP.
284
+ Skipping an fd will not touch the file associated with the previous
285
+ fd at that index. Available since 5.12.
286
+
287
+ .TP
288
+ .B IORING_REGISTER_FILES_UPDATE2
289
+ Similar to IORING_REGISTER_FILES_UPDATE, replaces existing files in the
290
+ registered file set with new ones, either turning a sparse entry (one where
291
+ fd is equal to -1) into a real one, removing an existing entry (new one is
292
+ set to -1), or replacing an existing entry with a new existing entry.
293
+
294
+ .I arg
295
+ must contain a pointer to a
296
+ .I struct io_uring_rsrc_update2,
297
+ which contains
298
+ an offset on which to start the update, and an array of file descriptors to
299
+ use for the update stored in
300
+ .I data.
301
+ .I tags
302
+ points to an array of tags.
303
+ .I nr
304
+ must contain the number of descriptors in the passed in arrays.
305
+ See
306
+ .B IORING_REGISTER_BUFFERS2
307
+ for the resource tagging description.
308
+
309
+ Available since 5.13.
310
+
311
+ .TP
312
+ .B IORING_UNREGISTER_FILES
313
+ This operation requires no argument, and
314
+ .I arg
315
+ must be passed as NULL. All previously registered files associated
316
+ with the io_uring instance will be unregistered. Available since 5.1.
317
+
318
+ .TP
319
+ .B IORING_REGISTER_EVENTFD
320
+ It's possible to use eventfd(2) to get notified of completion events on an
321
+ io_uring instance. If this is desired, an eventfd file descriptor can be
322
+ registered through this operation.
323
+ .I arg
324
+ must contain a pointer to the eventfd file descriptor, and
325
+ .I nr_args
326
+ must be 1. Available since 5.2.
327
+
328
+ An application can temporarily disable notifications, coming through the
329
+ registered eventfd, by setting the
330
+ .B IORING_CQ_EVENTFD_DISABLED
331
+ bit in the
332
+ .I flags
333
+ field of the CQ ring.
334
+ Available since 5.8.
335
+
336
+ .TP
337
+ .B IORING_REGISTER_EVENTFD_ASYNC
338
+ This works just like
339
+ .B IORING_REGISTER_EVENTFD
340
+ , except notifications are only posted for events that complete in an async
341
+ manner. This means that events that complete inline while being submitted
342
+ do not trigger a notification event. The arguments supplied are the same as
343
+ for
344
+ .B IORING_REGISTER_EVENTFD.
345
+ Available since 5.6.
346
+
347
+ .TP
348
+ .B IORING_UNREGISTER_EVENTFD
349
+ Unregister an eventfd file descriptor to stop notifications. Since only one
350
+ eventfd descriptor is currently supported, this operation takes no argument,
351
+ and
352
+ .I arg
353
+ must be passed as NULL and
354
+ .I nr_args
355
+ must be zero. Available since 5.2.
356
+
357
+ .TP
358
+ .B IORING_REGISTER_PROBE
359
+ This operation returns a structure, io_uring_probe, which contains information
360
+ about the opcodes supported by io_uring on the running kernel.
361
+ .I arg
362
+ must contain a pointer to a struct io_uring_probe, and
363
+ .I nr_args
364
+ must contain the size of the ops array in that probe struct. The ops array
365
+ is of the type io_uring_probe_op, which holds the value of the opcode and
366
+ a flags field. If the flags field has
367
+ .B IO_URING_OP_SUPPORTED
368
+ set, then this opcode is supported on the running kernel. Available since 5.6.
369
+
370
+ .TP
371
+ .B IORING_REGISTER_PERSONALITY
372
+ This operation registers credentials of the running application with io_uring,
373
+ and returns an id associated with these credentials. Applications wishing to
374
+ share a ring between separate users/processes can pass in this credential id
375
+ in the sqe
376
+ .B personality
377
+ field. If set, that particular sqe will be issued with these credentials. Must
378
+ be invoked with
379
+ .I arg
380
+ set to NULL and
381
+ .I nr_args
382
+ set to zero. Available since 5.6.
383
+
384
+ .TP
385
+ .B IORING_UNREGISTER_PERSONALITY
386
+ This operation unregisters a previously registered personality with io_uring.
387
+ .I nr_args
388
+ must be set to the id in question, and
389
+ .I arg
390
+ must be set to NULL. Available since 5.6.
391
+
392
+ .TP
393
+ .B IORING_REGISTER_ENABLE_RINGS
394
+ This operation enables an io_uring ring started in a disabled state
395
+ .RB (IORING_SETUP_R_DISABLED
396
+ was specified in the call to
397
+ .BR io_uring_setup (2)).
398
+ While the io_uring ring is disabled, submissions are not allowed and
399
+ registrations are not restricted.
400
+
401
+ After the execution of this operation, the io_uring ring is enabled:
402
+ submissions and registration are allowed, but they will
403
+ be validated following the registered restrictions (if any).
404
+ This operation takes no argument, must be invoked with
405
+ .I arg
406
+ set to NULL and
407
+ .I nr_args
408
+ set to zero. Available since 5.10.
409
+
410
+ .TP
411
+ .B IORING_REGISTER_RESTRICTIONS
412
+ .I arg
413
+ points to a
414
+ .I struct io_uring_restriction
415
+ array of
416
+ .I nr_args
417
+ entries.
418
+
419
+ With an entry it is possible to allow an
420
+ .BR io_uring_register ()
421
+ .I opcode,
422
+ or specify which
423
+ .I opcode
424
+ and
425
+ .I flags
426
+ of the submission queue entry are allowed,
427
+ or require certain
428
+ .I flags
429
+ to be specified (these flags must be set on each submission queue entry).
430
+
431
+ All the restrictions must be submitted with a single
432
+ .BR io_uring_register ()
433
+ call and they are handled as an allowlist (opcodes and flags not registered,
434
+ are not allowed).
435
+
436
+ Restrictions can be registered only if the io_uring ring started in a disabled
437
+ state
438
+ .RB (IORING_SETUP_R_DISABLED
439
+ must be specified in the call to
440
+ .BR io_uring_setup (2)).
441
+
442
+ Available since 5.10.
443
+
444
+ .TP
445
+ .B IORING_REGISTER_IOWQ_AFF
446
+ By default, async workers created by io_uring will inherit the CPU mask of its
447
+ parent. This is usually all the CPUs in the system, unless the parent is being
448
+ run with a limited set. If this isn't the desired outcome, the application
449
+ may explicitly tell io_uring what CPUs the async workers may run on.
450
+ .I arg
451
+ must point to a
452
+ .B cpu_set_t
453
+ mask, and
454
+ .I nr_args
455
+ the byte size of that mask.
456
+
457
+ Available since 5.14.
458
+
459
+ .TP
460
+ .B IORING_UNREGISTER_IOWQ_AFF
461
+ Undoes a CPU mask previously set with
462
+ .B IORING_REGISTER_IOWQ_AFF.
463
+ Must not have
464
+ .I arg
465
+ or
466
+ .I nr_args
467
+ set.
468
+
469
+ Available since 5.14.
470
+
471
+ .TP
472
+ .B IORING_REGISTER_IOWQ_MAX_WORKERS
473
+ By default, io_uring limits the unbounded workers created to the maximum
474
+ processor count set by
475
+ .I RLIMIT_NPROC
476
+ and the bounded workers is a function of the SQ ring size and the number
477
+ of CPUs in the system. Sometimes this can be excessive (or too little, for
478
+ bounded), and this command provides a way to change the count per ring (per NUMA
479
+ node) instead.
480
+
481
+ .I arg
482
+ must be set to an
483
+ .I unsigned int
484
+ pointer to an array of two values, with the values in the array being set to
485
+ the maximum count of workers per NUMA node. Index 0 holds the bounded worker
486
+ count, and index 1 holds the unbounded worker count. On successful return, the
487
+ passed in array will contain the previous maximum valyes for each type. If the
488
+ count being passed in is 0, then this command returns the current maximum values
489
+ and doesn't modify the current setting.
490
+ .I nr_args
491
+ must be set to 2, as the command takes two values.
492
+
493
+ Available since 5.15.
494
+
495
+ .SH RETURN VALUE
496
+
497
+ On success,
498
+ .BR io_uring_register ()
499
+ returns 0. On error, -1 is returned, and
500
+ .I errno
501
+ is set accordingly.
502
+
503
+ .SH ERRORS
504
+ .TP
505
+ .B EACCES
506
+ The
507
+ .I opcode
508
+ field is not allowed due to registered restrictions.
509
+ .TP
510
+ .B EBADF
511
+ One or more fds in the
512
+ .I fd
513
+ array are invalid.
514
+ .TP
515
+ .B EBADFD
516
+ .B IORING_REGISTER_ENABLE_RINGS
517
+ or
518
+ .B IORING_REGISTER_RESTRICTIONS
519
+ was specified, but the io_uring ring is not disabled.
520
+ .TP
521
+ .B EBUSY
522
+ .B IORING_REGISTER_BUFFERS
523
+ or
524
+ .B IORING_REGISTER_FILES
525
+ or
526
+ .B IORING_REGISTER_RESTRICTIONS
527
+ was specified, but there were already buffers, files, or restrictions
528
+ registered.
529
+ .TP
530
+ .B EFAULT
531
+ buffer is outside of the process' accessible address space, or
532
+ .I iov_len
533
+ is greater than 1GiB.
534
+ .TP
535
+ .B EINVAL
536
+ .B IORING_REGISTER_BUFFERS
537
+ or
538
+ .B IORING_REGISTER_FILES
539
+ was specified, but
540
+ .I nr_args
541
+ is 0.
542
+ .TP
543
+ .B EINVAL
544
+ .B IORING_REGISTER_BUFFERS
545
+ was specified, but
546
+ .I nr_args
547
+ exceeds
548
+ .B UIO_MAXIOV
549
+ .TP
550
+ .B EINVAL
551
+ .B IORING_UNREGISTER_BUFFERS
552
+ or
553
+ .B IORING_UNREGISTER_FILES
554
+ was specified, and
555
+ .I nr_args
556
+ is non-zero or
557
+ .I arg
558
+ is non-NULL.
559
+ .TP
560
+ .B EINVAL
561
+ .B IORING_REGISTER_RESTRICTIONS
562
+ was specified, but
563
+ .I nr_args
564
+ exceeds the maximum allowed number of restrictions or restriction
565
+ .I opcode
566
+ is invalid.
567
+ .TP
568
+ .B EMFILE
569
+ .B IORING_REGISTER_FILES
570
+ was specified and
571
+ .I nr_args
572
+ exceeds the maximum allowed number of files in a fixed file set.
573
+ .TP
574
+ .B EMFILE
575
+ .B IORING_REGISTER_FILES
576
+ was specified and adding
577
+ .I nr_args
578
+ file references would exceed the maximum allowed number of files the user
579
+ is allowed to have according to the
580
+ .B
581
+ RLIMIT_NOFILE
582
+ resource limit and the caller does not have
583
+ .B CAP_SYS_RESOURCE
584
+ capability. Note that this is a per user limit, not per process.
585
+ .TP
586
+ .B ENOMEM
587
+ Insufficient kernel resources are available, or the caller had a
588
+ non-zero
589
+ .B RLIMIT_MEMLOCK
590
+ soft resource limit, but tried to lock more memory than the limit
591
+ permitted. This limit is not enforced if the process is privileged
592
+ .RB ( CAP_IPC_LOCK ).
593
+ .TP
594
+ .B ENXIO
595
+ .B IORING_UNREGISTER_BUFFERS
596
+ or
597
+ .B IORING_UNREGISTER_FILES
598
+ was specified, but there were no buffers or files registered.
599
+ .TP
600
+ .B ENXIO
601
+ Attempt to register files or buffers on an io_uring instance that is already
602
+ undergoing file or buffer registration, or is being torn down.
603
+ .TP
604
+ .B EOPNOTSUPP
605
+ User buffers point to file-backed memory.