Commit 3cd8b194 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'v7.1-rc-part1-smbdirect-fixes' of git://git.samba.org/ksmbd

Pull smbdirect updates from Steve French:
 "Move smbdirect server and client code to common directory:

   - temporary use of smbdirect_all_c_files.c to allow micro steps

   - factor out common functions into a smbdirect.ko.

   - convert cifs.ko to use smbdirect.ko

   - convert ksmbd.ko to use smbdirect.ko

   - let smbdirect.ko use global workqueues

   - move ib_client logic from ksmbd.ko into smbdirect.ko

   - remove smbdirect_all_c_files.c hack again

   - some locking and teardown related fixes on top"

* tag 'v7.1-rc-part1-smbdirect-fixes' of git://git.samba.org/ksmbd: (145 commits)
  smb: smbdirect: let smbdirect_connection_deregister_mr_io unlock while waiting
  smb: smbdirect: fix the logic in smbdirect_socket_destroy_sync() without an error
  smb: smbdirect: fix copyright header of smbdirect.h
  smb: smbdirect: change smbdirect_socket_parameters.{initiator_depth,responder_resources} to __u16
  smb: smbdirect: remove unused SMBDIRECT_USE_INLINE_C_FILES logic
  smb: server: no longer use smbdirect_socket_set_custom_workqueue()
  smb: client: no longer use smbdirect_socket_set_custom_workqueue()
  smb: smbdirect: introduce global workqueues
  smb: smbdirect: prepare use of dedicated workqueues for different steps
  smb: smbdirect: remove unused smbdirect_connection_mr_io_recovery_work()
  smb: smbdirect: wrap rdma_disconnect() in rdma_[un]lock_handler()
  smb: server: make use of smbdirect_netdev_rdma_capable_mode_type()
  smb: smbdirect: introduce smbdirect_netdev_rdma_capable_mode_type()
  smb: server: make use of smbdirect.ko
  smb: server: remove unused ksmbd_transport_ops.prepare()
  smb: server: make use of smbdirect_socket_{listen,accept}()
  smb: server: only use public smbdirect functions
  smb: server: make use of smbdirect_socket_create_accepting()/smbdirect_socket_release()
  smb: server: make use of smbdirect_{socket_init_accepting,connection_wait_for_connected}()
  smb: server: make use of smbdirect_connection_send_iter() and related functions
  ...
parents d3d9443f d09a040c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@

source "fs/smb/client/Kconfig"
source "fs/smb/server/Kconfig"
source "fs/smb/common/smbdirect/Kconfig"

config SMBFS
	tristate
+3 −1
Original line number Diff line number Diff line
@@ -180,7 +180,9 @@ if CIFS

config CIFS_SMB_DIRECT
	bool "SMB Direct support"
	depends on CIFS=m && INFINIBAND && INFINIBAND_ADDR_TRANS || CIFS=y && INFINIBAND=y && INFINIBAND_ADDR_TRANS=y
	depends on CIFS && INFINIBAND && INFINIBAND_ADDR_TRANS
	depends on CIFS=m || INFINIBAND=y
	select SMB_COMMON_SMBDIRECT
	help
	  Enables SMB Direct support for SMB 3.0, 3.02 and 3.1.1.
	  SMB Direct allows transferring SMB packets over RDMA. If unsure,
+1 −66
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@
#endif
#ifdef CONFIG_CIFS_SMB_DIRECT
#include "smbdirect.h"
#include "../common/smbdirect/smbdirect_pdu.h"
#endif
#include "cifs_swn.h"
#include "cached_dir.h"
@@ -452,11 +451,6 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
	c = 0;
	spin_lock(&cifs_tcp_ses_lock);
	list_for_each_entry(server, &cifs_tcp_ses_list, tcp_ses_list) {
#ifdef CONFIG_CIFS_SMB_DIRECT
		struct smbdirect_socket *sc;
		struct smbdirect_socket_parameters *sp;
#endif

		/* channel info will be printed as a part of sessions below */
		if (SERVER_IS_CHAN(server))
			continue;
@@ -471,66 +465,7 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
		seq_printf(m, "\nClientGUID: %pUL", server->client_guid);
		spin_unlock(&server->srv_lock);
#ifdef CONFIG_CIFS_SMB_DIRECT
		if (!server->rdma)
			goto skip_rdma;

		if (!server->smbd_conn) {
			seq_printf(m, "\nSMBDirect transport not available");
			goto skip_rdma;
		}
		sc = &server->smbd_conn->socket;
		sp = &sc->parameters;

		seq_printf(m, "\nSMBDirect protocol version: 0x%x "
			"transport status: %s (%u)",
			SMBDIRECT_V1,
			smbdirect_socket_status_string(sc->status),
			sc->status);
		seq_printf(m, "\nConn receive_credit_max: %u "
			"send_credit_target: %u max_send_size: %u",
			sp->recv_credit_max,
			sp->send_credit_target,
			sp->max_send_size);
		seq_printf(m, "\nConn max_fragmented_recv_size: %u "
			"max_fragmented_send_size: %u max_receive_size:%u",
			sp->max_fragmented_recv_size,
			sp->max_fragmented_send_size,
			sp->max_recv_size);
		seq_printf(m, "\nConn keep_alive_interval: %u "
			"max_readwrite_size: %u rdma_readwrite_threshold: %u",
			sp->keepalive_interval_msec * 1000,
			sp->max_read_write_size,
			server->rdma_readwrite_threshold);
		seq_printf(m, "\nDebug count_get_receive_buffer: %llu "
			"count_put_receive_buffer: %llu count_send_empty: %llu",
			sc->statistics.get_receive_buffer,
			sc->statistics.put_receive_buffer,
			sc->statistics.send_empty);
		seq_printf(m, "\nRead Queue "
			"count_enqueue_reassembly_queue: %llu "
			"count_dequeue_reassembly_queue: %llu "
			"reassembly_data_length: %u "
			"reassembly_queue_length: %u",
			sc->statistics.enqueue_reassembly_queue,
			sc->statistics.dequeue_reassembly_queue,
			sc->recv_io.reassembly.data_length,
			sc->recv_io.reassembly.queue_length);
		seq_printf(m, "\nCurrent Credits send_credits: %u "
			"receive_credits: %u receive_credit_target: %u",
			atomic_read(&sc->send_io.credits.count),
			atomic_read(&sc->recv_io.credits.count),
			sc->recv_io.credits.target);
		seq_printf(m, "\nPending send_pending: %u ",
			atomic_read(&sc->send_io.pending.count));
		seq_printf(m, "\nMR responder_resources: %u "
			"max_frmr_depth: %u mr_type: 0x%x",
			sp->responder_resources,
			sp->max_frmr_depth,
			sc->mr_io.type);
		seq_printf(m, "\nMR mr_ready_count: %u mr_used_count: %u",
			atomic_read(&sc->mr_io.ready.count),
			atomic_read(&sc->mr_io.used.count));
skip_rdma:
		smbd_debug_proc_show(server, m);
#endif
		seq_printf(m, "\nNumber of credits: %d,%d,%d Dialect 0x%x",
			server->credits,
+2 −7
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@
#include "../common/smb2status.h"
#include "smb2glob.h"
#include "cifs_spnego.h"
#include "../common/smbdirect/smbdirect.h"
#include "smbdirect.h"
#include "trace.h"
#ifdef CONFIG_CIFS_DFS_UPCALL
@@ -4554,9 +4553,7 @@ smb2_new_read_req(void **buf, unsigned int *total_len,
		req->ReadChannelInfoLength =
			cpu_to_le16(sizeof(struct smbdirect_buffer_descriptor_v1));
		v1 = (struct smbdirect_buffer_descriptor_v1 *) &req->Buffer[0];
		v1->offset = cpu_to_le64(rdata->mr->mr->iova);
		v1->token = cpu_to_le32(rdata->mr->mr->rkey);
		v1->length = cpu_to_le32(rdata->mr->mr->length);
		smbd_mr_fill_buffer_descriptor(rdata->mr, v1);

		*total_len += sizeof(*v1) - 1;
	}
@@ -5155,9 +5152,7 @@ smb2_async_writev(struct cifs_io_subrequest *wdata)
		req->WriteChannelInfoLength =
			cpu_to_le16(sizeof(struct smbdirect_buffer_descriptor_v1));
		v1 = (struct smbdirect_buffer_descriptor_v1 *) &req->Buffer[0];
		v1->offset = cpu_to_le64(wdata->mr->mr->iova);
		v1->token = cpu_to_le32(wdata->mr->mr->rkey);
		v1->length = cpu_to_le32(wdata->mr->mr->length);
		smbd_mr_fill_buffer_descriptor(wdata->mr, v1);

		rqst.rq_iov[0].iov_len += sizeof(*v1);

+282 −3074

File changed.

Preview size limit exceeded, changes collapsed.

Loading