aboutsummaryrefslogtreecommitdiff
path: root/test/drop-submit.c
diff options
context:
space:
mode:
authorGil Cukierman <cukie@google.com>2022-10-31 15:25:16 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2022-10-31 15:25:16 +0000
commit1d27ff1934c5c4292dc00fba7f7f8ae411ed42f5 (patch)
treeebe9c872e416346e4b333e5062da32401c8e0a73 /test/drop-submit.c
parentd53db6851ea17b2d219d084e1afc683b8b62b105 (diff)
parent7ba7e81400b122a5e3b9dd1ec938fbeda8215899 (diff)
downloadliburing-master.tar.gz
Original change: https://android-review.googlesource.com/c/platform/external/liburing/+/2276974 Change-Id: I2a7ecac6e769b82bba38ebfbce3301259a663146 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'test/drop-submit.c')
-rw-r--r--test/drop-submit.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/test/drop-submit.c b/test/drop-submit.c
new file mode 100644
index 0000000..7b15f26
--- /dev/null
+++ b/test/drop-submit.c
@@ -0,0 +1,93 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Description: test IORING_SETUP_SUBMIT_ALL
+ *
+ */
+#include <errno.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "liburing.h"
+
+static int test(struct io_uring *ring, int expect_drops)
+{
+ struct io_uring_sqe *sqe;
+ char buf[32];
+ int ret, i;
+
+ for (i = 0; i < 4; i++) {
+ sqe = io_uring_get_sqe(ring);
+ if (!sqe) {
+ fprintf(stderr, "get sqe failed\n");
+ goto err;
+ }
+
+ io_uring_prep_nop(sqe);
+ }
+
+ /* prep two invalid reads, these will fail */
+ for (i = 0; i < 2; i++) {
+ sqe = io_uring_get_sqe(ring);
+ if (!sqe) {
+ fprintf(stderr, "get sqe failed\n");
+ goto err;
+ }
+
+ io_uring_prep_read(sqe, 128, buf, sizeof(buf), 0);
+ sqe->ioprio = (short) -1;
+ }
+
+
+ ret = io_uring_submit(ring);
+ if (expect_drops) {
+ if (ret != 5) {
+ fprintf(stderr, "drops submit failed: %d\n", ret);
+ goto err;
+ }
+ } else {
+ if (ret != 6) {
+ fprintf(stderr, "no drops submit failed: %d\n", ret);
+ goto err;
+ }
+ }
+
+ return 0;
+err:
+ return 1;
+}
+
+int main(int argc, char *argv[])
+{
+ struct io_uring ring;
+ int ret;
+
+ if (argc > 1)
+ return 0;
+
+ ret = io_uring_queue_init(8, &ring, IORING_SETUP_SUBMIT_ALL);
+ if (ret)
+ return 0;
+
+ ret = test(&ring, 0);
+ if (ret) {
+ fprintf(stderr, "test no drops failed\n");
+ return ret;
+ }
+
+ io_uring_queue_exit(&ring);
+
+ ret = io_uring_queue_init(8, &ring, 0);
+ if (ret) {
+ fprintf(stderr, "ring setup failed\n");
+ return 0;
+ }
+
+ ret = test(&ring, 1);
+ if (ret) {
+ fprintf(stderr, "test drops failed\n");
+ return ret;
+ }
+
+ return 0;
+}