[PATCH v2 2/3] smb/server: introduce struct ksmbd_transport_write

ChenXiaoSong <[email protected]>
Newsgroups org.kernel.vger.linux-cifs
Message-ID <[email protected]>
From: ChenXiaoSong <[email protected]>

Put the arguments of ksmbd_transport_ops ->writev() into a struct. This makes the
function call shorter and easier to read.

Add __ksmbd_conn_write() for the common write code. A later patch will use
it for another write helper.

No functional change.

Signed-off-by: ChenXiaoSong <[email protected]>
---
 fs/smb/server/connection.c     | 22 ++++++++++++++++------
 fs/smb/server/connection.h     | 13 ++++++++++---
 fs/smb/server/transport_rdma.c |  9 +++++----
 fs/smb/server/transport_tcp.c  | 13 +++++++------
 4 files changed, 38 insertions(+), 19 deletions(-)

diff --git a/fs/smb/server/connection.c b/fs/smb/server/connection.c
index dee8e4aced99..d5b35087556e 100644
--- a/fs/smb/server/connection.c
+++ b/fs/smb/server/connection.c
@@ -350,7 +350,8 @@ int ksmbd_conn_wait_idle_sess_id(struct ksmbd_conn *curr_conn, u64 sess_id)
 	return 0;
 }
 
-int ksmbd_conn_write(struct ksmbd_work *work)
+static int __ksmbd_conn_write(struct ksmbd_work *work,
+			      struct ksmbd_transport_write *write)
 {
 	struct ksmbd_conn *conn = work->conn;
 	int sent;
@@ -366,12 +367,14 @@ int ksmbd_conn_write(struct ksmbd_work *work)
 	if (!work->iov_idx)
 		return -EINVAL;
 
+	write->iov = work->iov;
+	write->iov_cnt = work->iov_cnt;
+	write->size = get_rfc1002_len(work->iov[0].iov_base) + 4;
+	write->need_invalidate_rkey = work->need_invalidate_rkey;
+	write->remote_key = work->remote_key;
+
 	ksmbd_conn_lock(conn);
-	sent = conn->transport->ops->writev(conn->transport, work->iov,
-			work->iov_cnt,
-			get_rfc1002_len(work->iov[0].iov_base) + 4,
-			work->need_invalidate_rkey,
-			work->remote_key);
+	sent = conn->transport->ops->writev(conn->transport, write);
 	ksmbd_conn_unlock(conn);
 
 	if (sent < 0) {
@@ -382,6 +385,13 @@ int ksmbd_conn_write(struct ksmbd_work *work)
 	return 0;
 }
 
+int ksmbd_conn_write(struct ksmbd_work *work)
+{
+	struct ksmbd_transport_write write = {};
+
+	return __ksmbd_conn_write(work, &write);
+}
+
 int ksmbd_conn_rdma_read(struct ksmbd_conn *conn,
 			 void *buf, unsigned int buflen,
 			 struct smbdirect_buffer_descriptor_v1 *desc,
diff --git a/fs/smb/server/connection.h b/fs/smb/server/connection.h
index ec75633b7da0..62df151ca554 100644
--- a/fs/smb/server/connection.h
+++ b/fs/smb/server/connection.h
@@ -132,14 +132,21 @@ struct ksmbd_conn_ops {
 	int	(*terminate_fn)(struct ksmbd_conn *conn);
 };
 
+struct ksmbd_transport_write {
+	struct kvec	*iov;
+	int		iov_cnt;
+	int		size;
+	bool		need_invalidate_rkey;
+	unsigned int	remote_key;
+};
+
 struct ksmbd_transport_ops {
 	void (*disconnect)(struct ksmbd_transport *t);
 	void (*shutdown)(struct ksmbd_transport *t);
 	int (*read)(struct ksmbd_transport *t, char *buf,
 		    unsigned int size, int max_retries);
-	int (*writev)(struct ksmbd_transport *t, struct kvec *iovs, int niov,
-		      int size, bool need_invalidate_rkey,
-		      unsigned int remote_key);
+	int (*writev)(struct ksmbd_transport *t,
+		      const struct ksmbd_transport_write *write);
 	int (*rdma_read)(struct ksmbd_transport *t,
 			 void *buf, unsigned int len,
 			 struct smbdirect_buffer_descriptor_v1 *desc,
diff --git a/fs/smb/server/transport_rdma.c b/fs/smb/server/transport_rdma.c
index b6d63ff8a8a3..b2a882421823 100644
--- a/fs/smb/server/transport_rdma.c
+++ b/fs/smb/server/transport_rdma.c
@@ -239,17 +239,18 @@ static int smb_direct_read(struct ksmbd_transport *t, char *buf,
 }
 
 static int smb_direct_writev(struct ksmbd_transport *t,
-			     struct kvec *iov, int niovs, int buflen,
-			     bool need_invalidate, unsigned int remote_key)
+			     const struct ksmbd_transport_write *write)
 {
 	struct smb_direct_transport *st = SMBD_TRANS(t);
 	struct smbdirect_socket *sc = st->socket;
 	struct iov_iter iter;
 
-	iov_iter_kvec(&iter, ITER_SOURCE, iov, niovs, buflen);
+	iov_iter_kvec(&iter, ITER_SOURCE, write->iov, write->iov_cnt,
+		      write->size);
 
 	return smbdirect_connection_send_iter(sc, &iter, 0,
-					      need_invalidate, remote_key);
+					      write->need_invalidate_rkey,
+					      write->remote_key);
 }
 
 static int smb_direct_rdma_write(struct ksmbd_transport *t,
diff --git a/fs/smb/server/transport_tcp.c b/fs/smb/server/transport_tcp.c
index 13b711ea575d..448f24d44b6b 100644
--- a/fs/smb/server/transport_tcp.c
+++ b/fs/smb/server/transport_tcp.c
@@ -417,14 +417,15 @@ static int ksmbd_tcp_read(struct ksmbd_transport *t, char *buf,
 	return ksmbd_tcp_readv(TCP_TRANS(t), &iov, 1, to_read, max_retries);
 }
 
-static int ksmbd_tcp_writev(struct ksmbd_transport *t, struct kvec *iov,
-			    int nvecs, int size, bool need_invalidate,
-			    unsigned int remote_key)
-
+static int ksmbd_tcp_writev(struct ksmbd_transport *t,
+			    const struct ksmbd_transport_write *write)
 {
-	struct msghdr smb_msg = {.msg_flags = MSG_NOSIGNAL};
+	struct msghdr smb_msg = {
+		.msg_flags = MSG_NOSIGNAL,
+	};
 
-	return kernel_sendmsg(TCP_TRANS(t)->sock, &smb_msg, iov, nvecs, size);
+	return kernel_sendmsg(TCP_TRANS(t)->sock, &smb_msg, write->iov,
+			      write->iov_cnt, write->size);
 }
 
 static void ksmbd_tcp_disconnect(struct ksmbd_transport *t)
-- 
2.54.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.