public inbox for [email protected]
 help / color / mirror / Atom feed
* [PATCH liburing] remove recvmsg_multishot
@ 2022-07-04 14:02 Dylan Yudaken
  2022-07-05 14:24 ` Jens Axboe
  0 siblings, 1 reply; 2+ messages in thread
From: Dylan Yudaken @ 2022-07-04 14:02 UTC (permalink / raw)
  To: Jens Axboe, Pavel Begunkov, io-uring; +Cc: Kernel-team, Dylan Yudaken

This was not well thought out enough, and has some API concerns. Such as
how do names and control messages come back in a multishot way.

For now delete the recvmsg API until the kernel API is solid.

Signed-off-by: Dylan Yudaken <[email protected]>
---
 man/io_uring_prep_recvmsg.3           | 20 --------------------
 man/io_uring_prep_recvmsg_multishot.3 |  1 -
 src/include/liburing.h                |  8 --------
 test/recv-multishot.c                 | 19 +++++--------------
 4 files changed, 5 insertions(+), 43 deletions(-)
 delete mode 120000 man/io_uring_prep_recvmsg_multishot.3

diff --git a/man/io_uring_prep_recvmsg.3 b/man/io_uring_prep_recvmsg.3
index 24c68ce..8c49411 100644
--- a/man/io_uring_prep_recvmsg.3
+++ b/man/io_uring_prep_recvmsg.3
@@ -15,11 +15,6 @@ io_uring_prep_recvmsg \- prepare a recvmsg request
 .BI "                           int " fd ","
 .BI "                           struct msghdr *" msg ","
 .BI "                           unsigned " flags ");"
-.PP
-.BI "void io_uring_prep_recvmsg_multishot(struct io_uring_sqe *" sqe ","
-.BI "                                     int " fd ","
-.BI "                                     struct msghdr *" msg ","
-.BI "                                     unsigned " flags ");"
 .fi
 .SH DESCRIPTION
 .PP
@@ -42,21 +37,6 @@ This function prepares an async
 request. See that man page for details on the arguments specified to this
 prep helper.
 
-The multishot version allows the application to issue a single receive request,
-which repeatedly posts a CQE when data is available. It requires length to be 0
-, the
-.B IOSQE_BUFFER_SELECT
-flag to be set and no
-.B MSG_WAITALL
-flag to be set.
-Therefore each CQE will take a buffer out of a provided buffer pool for receiving.
-The application should check the flags of each CQE, regardless of it's result.
-If a posted CQE does not have the
-.B IORING_CQE_F_MORE
-flag set then the multishot receive will be done and the application should issue a
-new request.
-Multishot variants are available since kernel 5.20.
-
 After calling this function, additional io_uring internal modifier flags
 may be set in the SQE
 .I off
diff --git a/man/io_uring_prep_recvmsg_multishot.3 b/man/io_uring_prep_recvmsg_multishot.3
deleted file mode 120000
index cd9566f..0000000
--- a/man/io_uring_prep_recvmsg_multishot.3
+++ /dev/null
@@ -1 +0,0 @@
-io_uring_prep_recvmsg.3
\ No newline at end of file
diff --git a/src/include/liburing.h b/src/include/liburing.h
index 4df3139..d35bfa9 100644
--- a/src/include/liburing.h
+++ b/src/include/liburing.h
@@ -419,14 +419,6 @@ static inline void io_uring_prep_recvmsg(struct io_uring_sqe *sqe, int fd,
 	sqe->msg_flags = flags;
 }
 
-static inline void io_uring_prep_recvmsg_multishot(struct io_uring_sqe *sqe,
-						   int fd, struct msghdr *msg,
-						   unsigned flags)
-{
-	io_uring_prep_recvmsg(sqe, fd, msg, flags);
-	sqe->ioprio |= IORING_RECV_MULTISHOT;
-}
-
 static inline void io_uring_prep_sendmsg(struct io_uring_sqe *sqe, int fd,
 					 const struct msghdr *msg,
 					 unsigned flags)
diff --git a/test/recv-multishot.c b/test/recv-multishot.c
index f6d41c8..9df8184 100644
--- a/test/recv-multishot.c
+++ b/test/recv-multishot.c
@@ -25,7 +25,6 @@ enum early_error_t {
 };
 
 struct args {
-	bool recvmsg;
 	bool stream;
 	bool wait_each;
 	enum early_error_t early_error;
@@ -48,7 +47,6 @@ static int test(struct args *args)
 	int recv_cqes = 0;
 	bool early_error = false;
 	bool early_error_started = false;
-	struct msghdr msg = { };
 	struct __kernel_timespec timeout = {
 		.tv_sec = 1,
 	};
@@ -101,13 +99,7 @@ static int test(struct args *args)
 	}
 
 	sqe = io_uring_get_sqe(&ring);
-	if (args->recvmsg) {
-		memset(&msg, 0, sizeof(msg));
-		msg.msg_namelen = sizeof(struct sockaddr_in);
-		io_uring_prep_recvmsg_multishot(sqe, fds[0], &msg, 0);
-	} else {
-		io_uring_prep_recv_multishot(sqe, fds[0], NULL, 0, 0);
-	}
+	io_uring_prep_recv_multishot(sqe, fds[0], NULL, 0, 0);
 	sqe->flags |= IOSQE_BUFFER_SELECT;
 	sqe->buf_group = 7;
 	io_uring_sqe_set_data64(sqe, 1234);
@@ -328,19 +320,18 @@ int main(int argc, char *argv[])
 	if (argc > 1)
 		return T_EXIT_SKIP;
 
-	for (loop = 0; loop < 7; loop++) {
+	for (loop = 0; loop < 4; loop++) {
 		struct args a = {
 			.stream = loop & 0x01,
-			.recvmsg = loop & 0x02,
-			.wait_each = loop & 0x4,
+			.wait_each = loop & 0x2,
 		};
 		for (early_error = 0; early_error < ERROR_EARLY_LAST; early_error++) {
 			a.early_error = (enum early_error_t)early_error;
 			ret = test(&a);
 			if (ret) {
 				fprintf(stderr,
-					"test stream=%d recvmsg=%d wait_each=%d early_error=%d failed\n",
-					a.stream, a.recvmsg, a.wait_each, a.early_error);
+					"test stream=%d wait_each=%d early_error=%d failed\n",
+					a.stream, a.wait_each, a.early_error);
 				return T_EXIT_FAIL;
 			}
 			if (no_recv_mshot)

base-commit: f8eb5f804288e10ae7ef442ef482e4dd8b18fee7
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-07-05 14:24 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-04 14:02 [PATCH liburing] remove recvmsg_multishot Dylan Yudaken
2022-07-05 14:24 ` Jens Axboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox