@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.
- package/binding.cc +66 -91
- package/deps/liburing/liburing/COPYING +502 -0
- package/deps/liburing/liburing/COPYING.GPL +339 -0
- package/deps/liburing/liburing/LICENSE +7 -0
- package/deps/liburing/liburing/Makefile +84 -0
- package/deps/liburing/liburing/Makefile.quiet +11 -0
- package/deps/liburing/liburing/README +46 -0
- package/deps/liburing/liburing/configure +420 -0
- package/deps/liburing/liburing/debian/README.Debian +7 -0
- package/deps/liburing/liburing/debian/changelog +27 -0
- package/deps/liburing/liburing/debian/compat +1 -0
- package/deps/liburing/liburing/debian/control +48 -0
- package/deps/liburing/liburing/debian/copyright +49 -0
- package/deps/liburing/liburing/debian/liburing-dev.install +4 -0
- package/deps/liburing/liburing/debian/liburing-dev.manpages +6 -0
- package/deps/liburing/liburing/debian/liburing1-udeb.install +1 -0
- package/deps/liburing/liburing/debian/liburing1.install +1 -0
- package/deps/liburing/liburing/debian/liburing1.symbols +32 -0
- package/deps/liburing/liburing/debian/patches/series +1 -0
- package/deps/liburing/liburing/debian/rules +81 -0
- package/deps/liburing/liburing/debian/source/format +1 -0
- package/deps/liburing/liburing/debian/source/local-options +2 -0
- package/deps/liburing/liburing/debian/source/options +1 -0
- package/deps/liburing/liburing/debian/watch +3 -0
- package/deps/liburing/liburing/examples/Makefile +29 -0
- package/deps/liburing/liburing/examples/io_uring-cp.c +279 -0
- package/deps/liburing/liburing/examples/io_uring-test.c +112 -0
- package/deps/liburing/liburing/examples/link-cp.c +193 -0
- package/deps/liburing/liburing/examples/ucontext-cp.c +273 -0
- package/deps/liburing/liburing/liburing.pc.in +12 -0
- package/deps/liburing/liburing/liburing.spec +66 -0
- package/deps/liburing/liburing/make-debs.sh +53 -0
- package/deps/liburing/liburing/man/io_uring.7 +736 -0
- package/deps/liburing/liburing/man/io_uring_enter.2 +1403 -0
- package/deps/liburing/liburing/man/io_uring_get_sqe.3 +37 -0
- package/deps/liburing/liburing/man/io_uring_queue_exit.3 +27 -0
- package/deps/liburing/liburing/man/io_uring_queue_init.3 +44 -0
- package/deps/liburing/liburing/man/io_uring_register.2 +605 -0
- package/deps/liburing/liburing/man/io_uring_setup.2 +515 -0
- package/deps/liburing/liburing/src/Makefile +76 -0
- package/deps/liburing/liburing/src/include/liburing/barrier.h +73 -0
- package/deps/liburing/liburing/src/include/liburing/io_uring.h +422 -0
- package/deps/liburing/liburing/src/include/liburing.h +775 -0
- package/deps/liburing/liburing/src/liburing.map +46 -0
- package/deps/liburing/liburing/src/queue.c +403 -0
- package/deps/liburing/liburing/src/register.c +299 -0
- package/deps/liburing/liburing/src/setup.c +356 -0
- package/deps/liburing/liburing/src/syscall.c +73 -0
- package/deps/liburing/liburing/src/syscall.h +20 -0
- package/deps/liburing/liburing/test/232c93d07b74-test.c +305 -0
- package/deps/liburing/liburing/test/35fa71a030ca-test.c +329 -0
- package/deps/liburing/liburing/test/500f9fbadef8-test.c +89 -0
- package/deps/liburing/liburing/test/7ad0e4b2f83c-test.c +93 -0
- package/deps/liburing/liburing/test/8a9973408177-test.c +106 -0
- package/deps/liburing/liburing/test/917257daa0fe-test.c +53 -0
- package/deps/liburing/liburing/test/Makefile +312 -0
- package/deps/liburing/liburing/test/a0908ae19763-test.c +58 -0
- package/deps/liburing/liburing/test/a4c0b3decb33-test.c +180 -0
- package/deps/liburing/liburing/test/accept-link.c +251 -0
- package/deps/liburing/liburing/test/accept-reuse.c +164 -0
- package/deps/liburing/liburing/test/accept-test.c +79 -0
- package/deps/liburing/liburing/test/accept.c +476 -0
- package/deps/liburing/liburing/test/across-fork.c +283 -0
- package/deps/liburing/liburing/test/b19062a56726-test.c +53 -0
- package/deps/liburing/liburing/test/b5837bd5311d-test.c +77 -0
- package/deps/liburing/liburing/test/ce593a6c480a-test.c +135 -0
- package/deps/liburing/liburing/test/close-opath.c +122 -0
- package/deps/liburing/liburing/test/config +10 -0
- package/deps/liburing/liburing/test/connect.c +398 -0
- package/deps/liburing/liburing/test/cq-full.c +96 -0
- package/deps/liburing/liburing/test/cq-overflow.c +294 -0
- package/deps/liburing/liburing/test/cq-peek-batch.c +102 -0
- package/deps/liburing/liburing/test/cq-ready.c +94 -0
- package/deps/liburing/liburing/test/cq-size.c +58 -0
- package/deps/liburing/liburing/test/d4ae271dfaae-test.c +96 -0
- package/deps/liburing/liburing/test/d77a67ed5f27-test.c +65 -0
- package/deps/liburing/liburing/test/defer.c +307 -0
- package/deps/liburing/liburing/test/double-poll-crash.c +186 -0
- package/deps/liburing/liburing/test/eeed8b54e0df-test.c +114 -0
- package/deps/liburing/liburing/test/empty-eownerdead.c +42 -0
- package/deps/liburing/liburing/test/eventfd-disable.c +151 -0
- package/deps/liburing/liburing/test/eventfd-ring.c +97 -0
- package/deps/liburing/liburing/test/eventfd.c +112 -0
- package/deps/liburing/liburing/test/fadvise.c +202 -0
- package/deps/liburing/liburing/test/fallocate.c +249 -0
- package/deps/liburing/liburing/test/fc2a85cb02ef-test.c +138 -0
- package/deps/liburing/liburing/test/file-register.c +843 -0
- package/deps/liburing/liburing/test/file-update.c +173 -0
- package/deps/liburing/liburing/test/files-exit-hang-poll.c +128 -0
- package/deps/liburing/liburing/test/files-exit-hang-timeout.c +134 -0
- package/deps/liburing/liburing/test/fixed-link.c +90 -0
- package/deps/liburing/liburing/test/fsync.c +224 -0
- package/deps/liburing/liburing/test/hardlink.c +136 -0
- package/deps/liburing/liburing/test/helpers.c +135 -0
- package/deps/liburing/liburing/test/helpers.h +67 -0
- package/deps/liburing/liburing/test/io-cancel.c +537 -0
- package/deps/liburing/liburing/test/io_uring_enter.c +296 -0
- package/deps/liburing/liburing/test/io_uring_register.c +664 -0
- package/deps/liburing/liburing/test/io_uring_setup.c +192 -0
- package/deps/liburing/liburing/test/iopoll.c +366 -0
- package/deps/liburing/liburing/test/lfs-openat-write.c +117 -0
- package/deps/liburing/liburing/test/lfs-openat.c +273 -0
- package/deps/liburing/liburing/test/link-timeout.c +1107 -0
- package/deps/liburing/liburing/test/link.c +496 -0
- package/deps/liburing/liburing/test/link_drain.c +229 -0
- package/deps/liburing/liburing/test/madvise.c +195 -0
- package/deps/liburing/liburing/test/mkdir.c +108 -0
- package/deps/liburing/liburing/test/multicqes_drain.c +383 -0
- package/deps/liburing/liburing/test/nop-all-sizes.c +107 -0
- package/deps/liburing/liburing/test/nop.c +115 -0
- package/deps/liburing/liburing/test/open-close.c +146 -0
- package/deps/liburing/liburing/test/openat2.c +240 -0
- package/deps/liburing/liburing/test/personality.c +204 -0
- package/deps/liburing/liburing/test/pipe-eof.c +81 -0
- package/deps/liburing/liburing/test/pipe-reuse.c +105 -0
- package/deps/liburing/liburing/test/poll-cancel-ton.c +139 -0
- package/deps/liburing/liburing/test/poll-cancel.c +135 -0
- package/deps/liburing/liburing/test/poll-link.c +227 -0
- package/deps/liburing/liburing/test/poll-many.c +208 -0
- package/deps/liburing/liburing/test/poll-mshot-update.c +273 -0
- package/deps/liburing/liburing/test/poll-ring.c +48 -0
- package/deps/liburing/liburing/test/poll-v-poll.c +353 -0
- package/deps/liburing/liburing/test/poll.c +109 -0
- package/deps/liburing/liburing/test/probe.c +137 -0
- package/deps/liburing/liburing/test/read-write.c +876 -0
- package/deps/liburing/liburing/test/register-restrictions.c +633 -0
- package/deps/liburing/liburing/test/rename.c +134 -0
- package/deps/liburing/liburing/test/ring-leak.c +173 -0
- package/deps/liburing/liburing/test/ring-leak2.c +249 -0
- package/deps/liburing/liburing/test/rsrc_tags.c +449 -0
- package/deps/liburing/liburing/test/runtests-loop.sh +16 -0
- package/deps/liburing/liburing/test/runtests.sh +170 -0
- package/deps/liburing/liburing/test/rw_merge_test.c +97 -0
- package/deps/liburing/liburing/test/self.c +91 -0
- package/deps/liburing/liburing/test/send_recv.c +291 -0
- package/deps/liburing/liburing/test/send_recvmsg.c +345 -0
- package/deps/liburing/liburing/test/sendmsg_fs_cve.c +198 -0
- package/deps/liburing/liburing/test/shared-wq.c +84 -0
- package/deps/liburing/liburing/test/short-read.c +75 -0
- package/deps/liburing/liburing/test/shutdown.c +163 -0
- package/deps/liburing/liburing/test/sigfd-deadlock.c +74 -0
- package/deps/liburing/liburing/test/socket-rw-eagain.c +156 -0
- package/deps/liburing/liburing/test/socket-rw.c +147 -0
- package/deps/liburing/liburing/test/splice.c +511 -0
- package/deps/liburing/liburing/test/sq-full-cpp.cc +45 -0
- package/deps/liburing/liburing/test/sq-full.c +45 -0
- package/deps/liburing/liburing/test/sq-poll-dup.c +200 -0
- package/deps/liburing/liburing/test/sq-poll-kthread.c +168 -0
- package/deps/liburing/liburing/test/sq-poll-share.c +137 -0
- package/deps/liburing/liburing/test/sq-space_left.c +159 -0
- package/deps/liburing/liburing/test/sqpoll-cancel-hang.c +159 -0
- package/deps/liburing/liburing/test/sqpoll-disable-exit.c +195 -0
- package/deps/liburing/liburing/test/sqpoll-exit-hang.c +77 -0
- package/deps/liburing/liburing/test/sqpoll-sleep.c +68 -0
- package/deps/liburing/liburing/test/statx.c +172 -0
- package/deps/liburing/liburing/test/stdout.c +232 -0
- package/deps/liburing/liburing/test/submit-link-fail.c +154 -0
- package/deps/liburing/liburing/test/submit-reuse.c +239 -0
- package/deps/liburing/liburing/test/symlink.c +116 -0
- package/deps/liburing/liburing/test/teardowns.c +58 -0
- package/deps/liburing/liburing/test/thread-exit.c +131 -0
- package/deps/liburing/liburing/test/timeout-new.c +246 -0
- package/deps/liburing/liburing/test/timeout-overflow.c +204 -0
- package/deps/liburing/liburing/test/timeout.c +1354 -0
- package/deps/liburing/liburing/test/unlink.c +111 -0
- package/deps/liburing/liburing/test/wakeup-hang.c +162 -0
- package/deps/liburing/liburing.gyp +20 -0
- package/deps/rocksdb/rocksdb/db/corruption_test.cc +62 -0
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl.h +7 -62
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_files.cc +25 -11
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_open.cc +74 -155
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.cc +1 -2
- package/deps/rocksdb/rocksdb/db/db_impl/db_impl_secondary.h +2 -2
- package/deps/rocksdb/rocksdb/env/fs_posix.cc +13 -0
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.cc +4 -2
- package/deps/rocksdb/rocksdb/file/file_prefetch_buffer.h +22 -4
- package/deps/rocksdb/rocksdb/file/prefetch_test.cc +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/file_system.h +15 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/statistics.h +5 -0
- package/deps/rocksdb/rocksdb/include/rocksdb/version.h +1 -1
- package/deps/rocksdb/rocksdb/monitoring/statistics.cc +3 -0
- package/deps/rocksdb/rocksdb/monitoring/stats_history_test.cc +3 -7
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader.h +2 -1
- package/deps/rocksdb/rocksdb/table/block_based/block_based_table_reader_test.cc +44 -29
- package/deps/rocksdb/rocksdb.gyp +4 -3
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/node.napi.node +0 -0
- package/prebuilds/darwin-x64/node.napi.node +0 -0
- package/prebuilds/linux-x64/node.napi.node +0 -0
- package/prebuilds/prebuilds/linux-x64/node.napi.node +0 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/* SPDX-License-Identifier: MIT */
|
|
2
|
+
/*
|
|
3
|
+
* gcc -Wall -O2 -D_GNU_SOURCE -o ucontext-cp ucontext-cp.c -luring
|
|
4
|
+
*/
|
|
5
|
+
#define _POSIX_C_SOURCE 199309L
|
|
6
|
+
#include <stdio.h>
|
|
7
|
+
#include <fcntl.h>
|
|
8
|
+
#include <string.h>
|
|
9
|
+
#include <stdlib.h>
|
|
10
|
+
#include <unistd.h>
|
|
11
|
+
#include <assert.h>
|
|
12
|
+
#include <errno.h>
|
|
13
|
+
#include <ucontext.h>
|
|
14
|
+
#include <signal.h>
|
|
15
|
+
#include <inttypes.h>
|
|
16
|
+
#include <sys/types.h>
|
|
17
|
+
#include <sys/ioctl.h>
|
|
18
|
+
#include <sys/timerfd.h>
|
|
19
|
+
#include <sys/poll.h>
|
|
20
|
+
#include "liburing.h"
|
|
21
|
+
|
|
22
|
+
#define QD 64
|
|
23
|
+
#define BS 1024
|
|
24
|
+
|
|
25
|
+
#ifndef SIGSTKSZ
|
|
26
|
+
#define SIGSTKSZ 8192
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
typedef struct {
|
|
30
|
+
struct io_uring *ring;
|
|
31
|
+
unsigned char *stack_buf;
|
|
32
|
+
ucontext_t ctx_main, ctx_fnew;
|
|
33
|
+
} async_context;
|
|
34
|
+
|
|
35
|
+
typedef struct {
|
|
36
|
+
async_context *pctx;
|
|
37
|
+
int *psuccess;
|
|
38
|
+
int *pfailure;
|
|
39
|
+
int infd;
|
|
40
|
+
int outfd;
|
|
41
|
+
} arguments_bundle;
|
|
42
|
+
|
|
43
|
+
#define DEFINE_AWAIT_OP(operation) \
|
|
44
|
+
static ssize_t await_##operation( \
|
|
45
|
+
async_context *pctx, \
|
|
46
|
+
int fd, \
|
|
47
|
+
const struct iovec *ioves, \
|
|
48
|
+
unsigned int nr_vecs, \
|
|
49
|
+
off_t offset) \
|
|
50
|
+
{ \
|
|
51
|
+
struct io_uring_sqe *sqe = io_uring_get_sqe(pctx->ring); \
|
|
52
|
+
struct io_uring_cqe *cqe; \
|
|
53
|
+
\
|
|
54
|
+
if (!sqe) \
|
|
55
|
+
return -1; \
|
|
56
|
+
\
|
|
57
|
+
io_uring_prep_##operation(sqe, fd, ioves, nr_vecs, offset); \
|
|
58
|
+
io_uring_sqe_set_data(sqe, pctx); \
|
|
59
|
+
swapcontext(&pctx->ctx_fnew, &pctx->ctx_main); \
|
|
60
|
+
io_uring_peek_cqe(pctx->ring, &cqe); \
|
|
61
|
+
assert(cqe); \
|
|
62
|
+
io_uring_cqe_seen(pctx->ring, cqe); \
|
|
63
|
+
\
|
|
64
|
+
return cqe->res; \
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
DEFINE_AWAIT_OP(readv)
|
|
68
|
+
DEFINE_AWAIT_OP(writev)
|
|
69
|
+
#undef DEFINE_AWAIT_OP
|
|
70
|
+
|
|
71
|
+
int await_poll(async_context *pctx, int fd, short poll_mask) {
|
|
72
|
+
struct io_uring_sqe *sqe = io_uring_get_sqe(pctx->ring);
|
|
73
|
+
struct io_uring_cqe *cqe;
|
|
74
|
+
if (!sqe)
|
|
75
|
+
return -1;
|
|
76
|
+
|
|
77
|
+
io_uring_prep_poll_add(sqe, fd, poll_mask);
|
|
78
|
+
io_uring_sqe_set_data(sqe, pctx);
|
|
79
|
+
swapcontext(&pctx->ctx_fnew, &pctx->ctx_main);
|
|
80
|
+
io_uring_peek_cqe(pctx->ring, &cqe);
|
|
81
|
+
assert(cqe);
|
|
82
|
+
io_uring_cqe_seen(pctx->ring, cqe);
|
|
83
|
+
|
|
84
|
+
return cqe->res;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
int await_delay(async_context *pctx, time_t seconds) {
|
|
88
|
+
struct io_uring_sqe *sqe = io_uring_get_sqe(pctx->ring);
|
|
89
|
+
struct io_uring_cqe *cqe;
|
|
90
|
+
struct __kernel_timespec ts = {
|
|
91
|
+
.tv_sec = seconds,
|
|
92
|
+
.tv_nsec = 0
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
if (!sqe)
|
|
96
|
+
return -1;
|
|
97
|
+
|
|
98
|
+
io_uring_prep_timeout(sqe, &ts, 0, 0);
|
|
99
|
+
io_uring_sqe_set_data(sqe, pctx);
|
|
100
|
+
swapcontext(&pctx->ctx_fnew, &pctx->ctx_main);
|
|
101
|
+
io_uring_peek_cqe(pctx->ring, &cqe);
|
|
102
|
+
assert(cqe);
|
|
103
|
+
io_uring_cqe_seen(pctx->ring, cqe);
|
|
104
|
+
|
|
105
|
+
return 0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
static int setup_context(async_context *pctx, struct io_uring *ring)
|
|
109
|
+
{
|
|
110
|
+
int ret;
|
|
111
|
+
|
|
112
|
+
pctx->ring = ring;
|
|
113
|
+
ret = getcontext(&pctx->ctx_fnew);
|
|
114
|
+
if (ret < 0) {
|
|
115
|
+
perror("getcontext");
|
|
116
|
+
return -1;
|
|
117
|
+
}
|
|
118
|
+
pctx->stack_buf = malloc(SIGSTKSZ);
|
|
119
|
+
if (!pctx->stack_buf) {
|
|
120
|
+
perror("malloc");
|
|
121
|
+
return -1;
|
|
122
|
+
}
|
|
123
|
+
pctx->ctx_fnew.uc_stack.ss_sp = pctx->stack_buf;
|
|
124
|
+
pctx->ctx_fnew.uc_stack.ss_size = SIGSTKSZ;
|
|
125
|
+
pctx->ctx_fnew.uc_link = &pctx->ctx_main;
|
|
126
|
+
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
static int copy_file(async_context *pctx, int infd, int outfd, struct iovec* piov)
|
|
131
|
+
{
|
|
132
|
+
off_t offset = 0;
|
|
133
|
+
|
|
134
|
+
for (;;) {
|
|
135
|
+
ssize_t bytes_read;
|
|
136
|
+
|
|
137
|
+
printf("%d->%d: readv %ld bytes from %ld\n", infd, outfd, (long) piov->iov_len, (long) offset);
|
|
138
|
+
if ((bytes_read = await_readv(pctx, infd, piov, 1, offset)) < 0) {
|
|
139
|
+
perror("await_readv");
|
|
140
|
+
return 1;
|
|
141
|
+
}
|
|
142
|
+
if (bytes_read == 0)
|
|
143
|
+
return 0;
|
|
144
|
+
|
|
145
|
+
piov->iov_len = bytes_read;
|
|
146
|
+
|
|
147
|
+
printf("%d->%d: writev %ld bytes from %ld\n", infd, outfd, (long) piov->iov_len, (long) offset);
|
|
148
|
+
if (await_writev(pctx, outfd, piov, 1, offset) != bytes_read) {
|
|
149
|
+
perror("await_writev");
|
|
150
|
+
return 1;
|
|
151
|
+
}
|
|
152
|
+
if (bytes_read < BS)
|
|
153
|
+
return 0;
|
|
154
|
+
offset += bytes_read;
|
|
155
|
+
|
|
156
|
+
printf("%d->%d: wait %ds\n", infd, outfd, 1);
|
|
157
|
+
await_delay(pctx, 1);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
static void copy_file_wrapper(arguments_bundle *pbundle)
|
|
162
|
+
{
|
|
163
|
+
struct iovec iov = {
|
|
164
|
+
.iov_base = malloc(BS),
|
|
165
|
+
.iov_len = BS,
|
|
166
|
+
};
|
|
167
|
+
async_context *pctx = pbundle->pctx;
|
|
168
|
+
|
|
169
|
+
int ret = copy_file(pctx, pbundle->infd, pbundle->outfd, &iov);
|
|
170
|
+
|
|
171
|
+
printf("%d->%d: done with ret code %d\n", pbundle->infd, pbundle->outfd, ret);
|
|
172
|
+
|
|
173
|
+
if (ret == 0) {
|
|
174
|
+
++*pbundle->psuccess;
|
|
175
|
+
} else {
|
|
176
|
+
++*pbundle->pfailure;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
free(iov.iov_base);
|
|
180
|
+
close(pbundle->infd);
|
|
181
|
+
close(pbundle->outfd);
|
|
182
|
+
free(pbundle->pctx->stack_buf);
|
|
183
|
+
free(pbundle->pctx);
|
|
184
|
+
free(pbundle);
|
|
185
|
+
|
|
186
|
+
swapcontext(&pctx->ctx_fnew, &pctx->ctx_main);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
int main(int argc, char *argv[])
|
|
190
|
+
{
|
|
191
|
+
struct io_uring ring;
|
|
192
|
+
int i, req_count, ret;
|
|
193
|
+
int success = 0, failure = 0;
|
|
194
|
+
|
|
195
|
+
if (argc < 3) {
|
|
196
|
+
fprintf(stderr, "%s: infile1 outfile1 [infile2 outfile2 [...]]\n", argv[0]);
|
|
197
|
+
return 1;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
ret = io_uring_queue_init(QD, &ring, 0);
|
|
201
|
+
if (ret < 0) {
|
|
202
|
+
fprintf(stderr, "queue_init: %s\n", strerror(-ret));
|
|
203
|
+
return -1;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
req_count = (argc - 1) / 2;
|
|
207
|
+
printf("copying %d files...\n", req_count);
|
|
208
|
+
|
|
209
|
+
for (i = 1; i < argc; i += 2) {
|
|
210
|
+
int infd, outfd;
|
|
211
|
+
|
|
212
|
+
async_context *pctx = malloc(sizeof(*pctx));
|
|
213
|
+
|
|
214
|
+
if (!pctx || setup_context(pctx, &ring))
|
|
215
|
+
return 1;
|
|
216
|
+
|
|
217
|
+
infd = open(argv[i], O_RDONLY);
|
|
218
|
+
if (infd < 0) {
|
|
219
|
+
perror("open infile");
|
|
220
|
+
return 1;
|
|
221
|
+
}
|
|
222
|
+
outfd = open(argv[i + 1], O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
|
223
|
+
if (outfd < 0) {
|
|
224
|
+
perror("open outfile");
|
|
225
|
+
return 1;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
arguments_bundle *pbundle = malloc(sizeof(*pbundle));
|
|
229
|
+
pbundle->pctx = pctx;
|
|
230
|
+
pbundle->psuccess = &success;
|
|
231
|
+
pbundle->pfailure = &failure;
|
|
232
|
+
pbundle->infd = infd;
|
|
233
|
+
pbundle->outfd = outfd;
|
|
234
|
+
|
|
235
|
+
makecontext(&pctx->ctx_fnew, (void (*)(void)) copy_file_wrapper, 1, pbundle);
|
|
236
|
+
|
|
237
|
+
if (swapcontext(&pctx->ctx_main, &pctx->ctx_fnew)) {
|
|
238
|
+
perror("swapcontext");
|
|
239
|
+
return 1;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/* event loop */
|
|
244
|
+
while (success + failure < req_count) {
|
|
245
|
+
struct io_uring_cqe *cqe;
|
|
246
|
+
|
|
247
|
+
/* usually be timed waiting */
|
|
248
|
+
ret = io_uring_submit_and_wait(&ring, 1);
|
|
249
|
+
if (ret < 0) {
|
|
250
|
+
fprintf(stderr, "submit_and_wait: %s\n", strerror(-ret));
|
|
251
|
+
return 1;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
ret = io_uring_wait_cqe(&ring, &cqe);
|
|
255
|
+
if (ret < 0) {
|
|
256
|
+
fprintf(stderr, "wait_cqe: %s\n", strerror(-ret));
|
|
257
|
+
return 1;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
async_context *pctx = io_uring_cqe_get_data(cqe);
|
|
261
|
+
|
|
262
|
+
if (swapcontext(&pctx->ctx_main, &pctx->ctx_fnew)) {
|
|
263
|
+
perror("swapcontext");
|
|
264
|
+
return 1;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
io_uring_queue_exit(&ring);
|
|
269
|
+
|
|
270
|
+
printf("finished with %d success(es) and %d failure(s)\n", success, failure);
|
|
271
|
+
|
|
272
|
+
return failure > 0;
|
|
273
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
Name: liburing
|
|
2
|
+
Version: 2.0
|
|
3
|
+
Release: 1%{?dist}
|
|
4
|
+
Summary: Linux-native io_uring I/O access library
|
|
5
|
+
License: (GPLv2 with exceptions and LGPLv2+) or MIT
|
|
6
|
+
Source0: https://brick.kernel.dk/snaps/%{name}-%{version}.tar.gz
|
|
7
|
+
Source1: https://brick.kernel.dk/snaps/%{name}-%{version}.tar.gz.asc
|
|
8
|
+
URL: https://git.kernel.dk/cgit/liburing/
|
|
9
|
+
BuildRequires: gcc
|
|
10
|
+
BuildRequires: make
|
|
11
|
+
|
|
12
|
+
%description
|
|
13
|
+
Provides native async IO for the Linux kernel, in a fast and efficient
|
|
14
|
+
manner, for both buffered and O_DIRECT.
|
|
15
|
+
|
|
16
|
+
%package devel
|
|
17
|
+
Summary: Development files for Linux-native io_uring I/O access library
|
|
18
|
+
Requires: %{name}%{_isa} = %{version}-%{release}
|
|
19
|
+
Requires: pkgconfig
|
|
20
|
+
|
|
21
|
+
%description devel
|
|
22
|
+
This package provides header files to include and libraries to link with
|
|
23
|
+
for the Linux-native io_uring.
|
|
24
|
+
|
|
25
|
+
%prep
|
|
26
|
+
%autosetup
|
|
27
|
+
|
|
28
|
+
%build
|
|
29
|
+
%set_build_flags
|
|
30
|
+
./configure --prefix=%{_prefix} --libdir=/%{_libdir} --libdevdir=/%{_libdir} --mandir=%{_mandir} --includedir=%{_includedir}
|
|
31
|
+
|
|
32
|
+
%make_build
|
|
33
|
+
|
|
34
|
+
%install
|
|
35
|
+
%make_install
|
|
36
|
+
|
|
37
|
+
%files
|
|
38
|
+
%attr(0755,root,root) %{_libdir}/liburing.so.*
|
|
39
|
+
%license COPYING
|
|
40
|
+
|
|
41
|
+
%files devel
|
|
42
|
+
%{_includedir}/liburing/
|
|
43
|
+
%{_includedir}/liburing.h
|
|
44
|
+
%{_libdir}/liburing.so
|
|
45
|
+
%exclude %{_libdir}/liburing.a
|
|
46
|
+
%{_libdir}/pkgconfig/*
|
|
47
|
+
%{_mandir}/man2/*
|
|
48
|
+
%{_mandir}/man3/*
|
|
49
|
+
%{_mandir}/man7/*
|
|
50
|
+
|
|
51
|
+
%changelog
|
|
52
|
+
* Thu Oct 31 2019 Jeff Moyer <jmoyer@redhat.com> - 0.2-1
|
|
53
|
+
- Add io_uring_cq_ready()
|
|
54
|
+
- Add io_uring_peek_batch_cqe()
|
|
55
|
+
- Add io_uring_prep_accept()
|
|
56
|
+
- Add io_uring_prep_{recv,send}msg()
|
|
57
|
+
- Add io_uring_prep_timeout_remove()
|
|
58
|
+
- Add io_uring_queue_init_params()
|
|
59
|
+
- Add io_uring_register_files_update()
|
|
60
|
+
- Add io_uring_sq_space_left()
|
|
61
|
+
- Add io_uring_wait_cqe_timeout()
|
|
62
|
+
- Add io_uring_wait_cqes()
|
|
63
|
+
- Add io_uring_wait_cqes_timeout()
|
|
64
|
+
|
|
65
|
+
* Tue Jan 8 2019 Jens Axboe <axboe@kernel.dk> - 0.1
|
|
66
|
+
- Initial version
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (C) 2019 Liu Changcheng <changcheng.liu@aliyun.com>
|
|
3
|
+
# Author: Liu Changcheng <changcheng.liu@aliyun.com>
|
|
4
|
+
#
|
|
5
|
+
# This program is free software; you can redistribute it and/or
|
|
6
|
+
# modify it under the terms of the GNU General Public License
|
|
7
|
+
# as published by the Free Software Foundation; either version 2
|
|
8
|
+
# of the License, or (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU General Public License
|
|
16
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
set -xe
|
|
19
|
+
|
|
20
|
+
# Create dir for build
|
|
21
|
+
base=${1:-/tmp/release}
|
|
22
|
+
codename=$(lsb_release -sc)
|
|
23
|
+
releasedir=$base/$(lsb_release -si)/liburing
|
|
24
|
+
rm -rf $releasedir
|
|
25
|
+
mkdir -p $releasedir
|
|
26
|
+
|
|
27
|
+
src_dir=$(readlink -e `basename $0`)
|
|
28
|
+
liburing_dir=$(dirname $src_dir)
|
|
29
|
+
basename=$(basename $liburing_dir)
|
|
30
|
+
dirname=$(dirname $liburing_dir)
|
|
31
|
+
version=$(git describe --match "lib*" | cut -d '-' -f 2)
|
|
32
|
+
outfile="liburing-$version"
|
|
33
|
+
orgfile=$(echo $outfile | tr '-' '_')
|
|
34
|
+
|
|
35
|
+
# Prepare source code
|
|
36
|
+
cp -arf ${dirname}/${basename} ${releasedir}/${outfile}
|
|
37
|
+
cd ${releasedir}/${outfile}
|
|
38
|
+
git clean -dxf
|
|
39
|
+
|
|
40
|
+
# Change changelog if it's needed
|
|
41
|
+
cur_ver=`head -l debian/changelog | sed -n -e 's/.* (\(.*\)) .*/\1/p'`
|
|
42
|
+
if [ "$cur_ver" != "$version-1" ]; then
|
|
43
|
+
dch -D $codename --force-distribution -b -v "$version-1" "new version"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
# Create tar archieve
|
|
47
|
+
cd ../
|
|
48
|
+
tar cvzf ${outfile}.tar.gz ${outfile}
|
|
49
|
+
ln -s ${outfile}.tar.gz ${orgfile}.orig.tar.gz
|
|
50
|
+
|
|
51
|
+
# Build debian package
|
|
52
|
+
cd -
|
|
53
|
+
debuild
|