gazelle/0112-add-writev-and-readv.patch
wu-changsheng d26daf42c1 optimize ceph client performance
(cherry picked from commit 20b786104f8d721a6fd69607fb086b21a4d1edfa)
2022-11-04 10:40:56 +08:00

97 lines
2.8 KiB
Diff

From f657eef24e947bb2d581599ddaf016b51ac349ae Mon Sep 17 00:00:00 2001
From: compile_success <980965867@qq.com>
Date: Sat, 22 Oct 2022 06:26:19 +0000
Subject: [PATCH 1/7] add writev and readv
---
src/lstack/api/lstack_wrap.c | 44 ++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/src/lstack/api/lstack_wrap.c b/src/lstack/api/lstack_wrap.c
index 1c1dcdd..9672d3d 100644
--- a/src/lstack/api/lstack_wrap.c
+++ b/src/lstack/api/lstack_wrap.c
@@ -333,6 +333,20 @@ static inline ssize_t do_read(int32_t s, void *mem, size_t len)
return posix_api->read_fn(s, mem, len);
}
+static inline ssize_t do_readv(int32_t s, const struct iovec *iov, int iovcnt)
+{
+ struct msghdr msg;
+
+ msg.msg_name = NULL;
+ msg.msg_namelen = 0;
+ msg.msg_iov = LWIP_CONST_CAST(struct iovec *, iov);
+ msg.msg_iovlen = iovcnt;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ msg.msg_flags = 0;
+ return recvmsg_from_stack(s, &msg, 0);
+}
+
static inline ssize_t do_send(int32_t sockfd, const void *buf, size_t len, int32_t flags)
{
if (select_path(sockfd) != PATH_LWIP) {
@@ -351,6 +365,20 @@ static inline ssize_t do_write(int32_t s, const void *mem, size_t size)
return gazelle_send(s, mem, size, 0);
}
+static inline ssize_t do_writev(int32_t s, const struct iovec *iov, int iovcnt)
+{
+ struct msghdr msg;
+
+ msg.msg_name = NULL;
+ msg.msg_namelen = 0;
+ msg.msg_iov = LWIP_CONST_CAST(struct iovec *, iov);
+ msg.msg_iovlen = iovcnt;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ msg.msg_flags = 0;
+ return sendmsg_to_stack(s, &msg, 0);
+}
+
static inline ssize_t do_recvmsg(int32_t s, struct msghdr *message, int32_t flags)
{
if (message == NULL) {
@@ -526,14 +554,26 @@ ssize_t read(int32_t s, void *mem, size_t len)
{
return do_read(s, mem, len);
}
+ssize_t readv(int32_t s, const struct iovec *iov, int iovcnt)
+{
+ return do_readv(s, iov, iovcnt);
+}
ssize_t write(int32_t s, const void *mem, size_t size)
{
return do_write(s, mem, size);
}
+ssize_t writev(int32_t s, const struct iovec *iov, int iovcnt)
+{
+ return do_writev(s, iov, iovcnt);
+}
ssize_t __wrap_write(int32_t s, const void *mem, size_t size)
{
return do_write(s, mem, size);
}
+ssize_t __wrap_writev(int32_t s, const struct iovec *iov, int iovcnt)
+{
+ return do_writev(s, iov, iovcnt);
+}
ssize_t recv(int32_t sockfd, void *buf, size_t len, int32_t flags)
{
return do_recv(sockfd, buf, len, flags);
@@ -649,6 +689,10 @@ ssize_t __wrap_read(int32_t s, void *mem, size_t len)
{
return do_read(s, mem, len);
}
+ssize_t __wrap_readv(int32_t s, const struct iovec *iov, int iovcnt)
+{
+ return do_readv(s, iov, iovcnt);
+}
ssize_t __wrap_recv(int32_t sockfd, void *buf, size_t len, int32_t flags)
{
return do_recv(sockfd, buf, len, flags);
--
2.23.0