mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-14 18:25:48 -04:00
smb: client: make use of smbdirect_socket_parameters.max_frmr_depth
This make it easier to have common code later. Cc: Steve French <smfrench@gmail.com> Cc: Tom Talpey <tom@talpey.com> Cc: Long Li <longli@microsoft.com> Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Stefan Metzmacher <metze@samba.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
committed by
Steve French
parent
f454f36cd0
commit
9a52e3b0d6
@@ -501,7 +501,7 @@ static int cifs_debug_data_proc_show(struct seq_file *m, void *v)
|
||||
seq_printf(m, "\nMR responder_resources: %u "
|
||||
"max_frmr_depth: %u mr_type: 0x%x",
|
||||
sp->responder_resources,
|
||||
server->smbd_conn->max_frmr_depth,
|
||||
sp->max_frmr_depth,
|
||||
server->smbd_conn->mr_type);
|
||||
seq_printf(m, "\nMR mr_ready_count: %u mr_used_count: %u",
|
||||
atomic_read(&server->smbd_conn->mr_ready_count),
|
||||
|
||||
@@ -97,8 +97,12 @@ static void cifs_prepare_write(struct netfs_io_subrequest *subreq)
|
||||
cifs_trace_rw_credits_write_prepare);
|
||||
|
||||
#ifdef CONFIG_CIFS_SMB_DIRECT
|
||||
if (server->smbd_conn)
|
||||
stream->sreq_max_segs = server->smbd_conn->max_frmr_depth;
|
||||
if (server->smbd_conn) {
|
||||
const struct smbdirect_socket_parameters *sp =
|
||||
smbd_get_parameters(server->smbd_conn);
|
||||
|
||||
stream->sreq_max_segs = sp->max_frmr_depth;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -187,8 +191,12 @@ static int cifs_prepare_read(struct netfs_io_subrequest *subreq)
|
||||
cifs_trace_rw_credits_read_submit);
|
||||
|
||||
#ifdef CONFIG_CIFS_SMB_DIRECT
|
||||
if (server->smbd_conn)
|
||||
rreq->io_streams[0].sreq_max_segs = server->smbd_conn->max_frmr_depth;
|
||||
if (server->smbd_conn) {
|
||||
const struct smbdirect_socket_parameters *sp =
|
||||
smbd_get_parameters(server->smbd_conn);
|
||||
|
||||
rreq->io_streams[0].sreq_max_segs = sp->max_frmr_depth;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -472,8 +472,6 @@ static bool process_negotiation_response(
|
||||
struct smbdirect_recv_io *response, int packet_length)
|
||||
{
|
||||
struct smbdirect_socket *sc = response->socket;
|
||||
struct smbd_connection *info =
|
||||
container_of(sc, struct smbd_connection, socket);
|
||||
struct smbdirect_socket_parameters *sp = &sc->parameters;
|
||||
struct smbdirect_negotiate_resp *packet = smbdirect_recv_io_payload(response);
|
||||
|
||||
@@ -529,8 +527,8 @@ static bool process_negotiation_response(
|
||||
|
||||
sp->max_read_write_size = min_t(u32,
|
||||
le32_to_cpu(packet->max_readwrite_size),
|
||||
info->max_frmr_depth * PAGE_SIZE);
|
||||
info->max_frmr_depth = sp->max_read_write_size / PAGE_SIZE;
|
||||
sp->max_frmr_depth * PAGE_SIZE);
|
||||
sp->max_frmr_depth = sp->max_read_write_size / PAGE_SIZE;
|
||||
|
||||
sc->recv_io.expected = SMBDIRECT_EXPECT_DATA_TRANSFER;
|
||||
return true;
|
||||
@@ -837,6 +835,7 @@ static int smbd_ia_open(
|
||||
struct sockaddr *dstaddr, int port)
|
||||
{
|
||||
struct smbdirect_socket *sc = &info->socket;
|
||||
struct smbdirect_socket_parameters *sp = &sc->parameters;
|
||||
int rc;
|
||||
|
||||
WARN_ON_ONCE(sc->status != SMBDIRECT_SOCKET_CREATED);
|
||||
@@ -857,8 +856,8 @@ static int smbd_ia_open(
|
||||
rc = -EPROTONOSUPPORT;
|
||||
goto out2;
|
||||
}
|
||||
info->max_frmr_depth = min_t(int,
|
||||
smbd_max_frmr_depth,
|
||||
sp->max_frmr_depth = min_t(u32,
|
||||
sp->max_frmr_depth,
|
||||
sc->ib.dev->attrs.max_fast_reg_page_list_len);
|
||||
info->mr_type = IB_MR_TYPE_MEM_REG;
|
||||
if (sc->ib.dev->attrs.kernel_cap_flags & IBK_SG_GAPS_REG)
|
||||
@@ -1770,6 +1769,7 @@ static struct smbd_connection *_smbd_get_connection(
|
||||
sp->max_send_size = smbd_max_send_size;
|
||||
sp->max_fragmented_recv_size = smbd_max_fragmented_recv_size;
|
||||
sp->max_recv_size = smbd_max_receive_size;
|
||||
sp->max_frmr_depth = smbd_max_frmr_depth;
|
||||
sp->keepalive_interval_msec = smbd_keep_alive_interval * 1000;
|
||||
sp->keepalive_timeout_msec = KEEPALIVE_RECV_TIMEOUT * 1000;
|
||||
|
||||
@@ -2255,6 +2255,7 @@ static void smbd_mr_recovery_work(struct work_struct *work)
|
||||
struct smbd_connection *info =
|
||||
container_of(work, struct smbd_connection, mr_recovery_work);
|
||||
struct smbdirect_socket *sc = &info->socket;
|
||||
struct smbdirect_socket_parameters *sp = &sc->parameters;
|
||||
struct smbdirect_mr_io *smbdirect_mr;
|
||||
int rc;
|
||||
|
||||
@@ -2273,11 +2274,11 @@ static void smbd_mr_recovery_work(struct work_struct *work)
|
||||
|
||||
smbdirect_mr->mr = ib_alloc_mr(
|
||||
sc->ib.pd, info->mr_type,
|
||||
info->max_frmr_depth);
|
||||
sp->max_frmr_depth);
|
||||
if (IS_ERR(smbdirect_mr->mr)) {
|
||||
log_rdma_mr(ERR, "ib_alloc_mr failed mr_type=%x max_frmr_depth=%x\n",
|
||||
info->mr_type,
|
||||
info->max_frmr_depth);
|
||||
sp->max_frmr_depth);
|
||||
smbd_disconnect_rdma_connection(info);
|
||||
continue;
|
||||
}
|
||||
@@ -2348,13 +2349,13 @@ static int allocate_mr_list(struct smbd_connection *info)
|
||||
if (!smbdirect_mr)
|
||||
goto cleanup_entries;
|
||||
smbdirect_mr->mr = ib_alloc_mr(sc->ib.pd, info->mr_type,
|
||||
info->max_frmr_depth);
|
||||
sp->max_frmr_depth);
|
||||
if (IS_ERR(smbdirect_mr->mr)) {
|
||||
log_rdma_mr(ERR, "ib_alloc_mr failed mr_type=%x max_frmr_depth=%x\n",
|
||||
info->mr_type, info->max_frmr_depth);
|
||||
info->mr_type, sp->max_frmr_depth);
|
||||
goto out;
|
||||
}
|
||||
smbdirect_mr->sgt.sgl = kcalloc(info->max_frmr_depth,
|
||||
smbdirect_mr->sgt.sgl = kcalloc(sp->max_frmr_depth,
|
||||
sizeof(struct scatterlist),
|
||||
GFP_KERNEL);
|
||||
if (!smbdirect_mr->sgt.sgl) {
|
||||
@@ -2459,15 +2460,16 @@ struct smbdirect_mr_io *smbd_register_mr(struct smbd_connection *info,
|
||||
bool writing, bool need_invalidate)
|
||||
{
|
||||
struct smbdirect_socket *sc = &info->socket;
|
||||
struct smbdirect_socket_parameters *sp = &sc->parameters;
|
||||
struct smbdirect_mr_io *smbdirect_mr;
|
||||
int rc, num_pages;
|
||||
enum dma_data_direction dir;
|
||||
struct ib_reg_wr *reg_wr;
|
||||
|
||||
num_pages = iov_iter_npages(iter, info->max_frmr_depth + 1);
|
||||
if (num_pages > info->max_frmr_depth) {
|
||||
num_pages = iov_iter_npages(iter, sp->max_frmr_depth + 1);
|
||||
if (num_pages > sp->max_frmr_depth) {
|
||||
log_rdma_mr(ERR, "num_pages=%d max_frmr_depth=%d\n",
|
||||
num_pages, info->max_frmr_depth);
|
||||
num_pages, sp->max_frmr_depth);
|
||||
WARN_ON_ONCE(1);
|
||||
return NULL;
|
||||
}
|
||||
@@ -2485,8 +2487,8 @@ struct smbdirect_mr_io *smbd_register_mr(struct smbd_connection *info,
|
||||
smbdirect_mr->sgt.orig_nents = 0;
|
||||
|
||||
log_rdma_mr(INFO, "num_pages=0x%x count=0x%zx depth=%u\n",
|
||||
num_pages, iov_iter_count(iter), info->max_frmr_depth);
|
||||
smbd_iter_to_mr(info, iter, &smbdirect_mr->sgt, info->max_frmr_depth);
|
||||
num_pages, iov_iter_count(iter), sp->max_frmr_depth);
|
||||
smbd_iter_to_mr(info, iter, &smbdirect_mr->sgt, sp->max_frmr_depth);
|
||||
|
||||
rc = ib_dma_map_sg(sc->ib.dev, smbdirect_mr->sgt.sgl,
|
||||
smbdirect_mr->sgt.nents, dir);
|
||||
|
||||
@@ -41,8 +41,6 @@ struct smbd_connection {
|
||||
|
||||
|
||||
/* Memory registrations */
|
||||
/* Maximum number of pages in a single RDMA write/read on this connection */
|
||||
int max_frmr_depth;
|
||||
enum ib_mr_type mr_type;
|
||||
struct list_head mr_list;
|
||||
spinlock_t mr_list_lock;
|
||||
|
||||
Reference in New Issue
Block a user