mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-14 11:11:22 -04:00
smb: server: make use of struct smbdirect_recv_io
This will allow us to move helper functions into common code soon as the client already uses smbdirect_recv_io. Cc: Namjae Jeon <linkinjeon@kernel.org> Cc: Steve French <smfrench@gmail.com> Cc: Tom Talpey <tom@talpey.com> Cc: linux-cifs@vger.kernel.org Cc: samba-technical@lists.samba.org Signed-off-by: Stefan Metzmacher <metze@samba.org> Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
committed by
Steve French
parent
3e691b1d16
commit
9883a142f1
@@ -165,15 +165,6 @@ struct smb_direct_sendmsg {
|
||||
u8 packet[];
|
||||
};
|
||||
|
||||
struct smb_direct_recvmsg {
|
||||
struct smb_direct_transport *transport;
|
||||
struct list_head list;
|
||||
struct ib_sge sge;
|
||||
struct ib_cqe cqe;
|
||||
bool first_segment;
|
||||
u8 packet[];
|
||||
};
|
||||
|
||||
struct smb_direct_rdma_rw_msg {
|
||||
struct smb_direct_transport *t;
|
||||
struct ib_cqe cqe;
|
||||
@@ -216,7 +207,7 @@ smb_trans_direct_transfort(struct ksmbd_transport *t)
|
||||
}
|
||||
|
||||
static inline void
|
||||
*smb_direct_recvmsg_payload(struct smb_direct_recvmsg *recvmsg)
|
||||
*smbdirect_recv_io_payload(struct smbdirect_recv_io *recvmsg)
|
||||
{
|
||||
return (void *)recvmsg->packet;
|
||||
}
|
||||
@@ -229,14 +220,14 @@ static inline bool is_receive_credit_post_required(int receive_credits,
|
||||
}
|
||||
|
||||
static struct
|
||||
smb_direct_recvmsg *get_free_recvmsg(struct smb_direct_transport *t)
|
||||
smbdirect_recv_io *get_free_recvmsg(struct smb_direct_transport *t)
|
||||
{
|
||||
struct smb_direct_recvmsg *recvmsg = NULL;
|
||||
struct smbdirect_recv_io *recvmsg = NULL;
|
||||
|
||||
spin_lock(&t->recvmsg_queue_lock);
|
||||
if (!list_empty(&t->recvmsg_queue)) {
|
||||
recvmsg = list_first_entry(&t->recvmsg_queue,
|
||||
struct smb_direct_recvmsg,
|
||||
struct smbdirect_recv_io,
|
||||
list);
|
||||
list_del(&recvmsg->list);
|
||||
}
|
||||
@@ -245,7 +236,7 @@ smb_direct_recvmsg *get_free_recvmsg(struct smb_direct_transport *t)
|
||||
}
|
||||
|
||||
static void put_recvmsg(struct smb_direct_transport *t,
|
||||
struct smb_direct_recvmsg *recvmsg)
|
||||
struct smbdirect_recv_io *recvmsg)
|
||||
{
|
||||
struct smbdirect_socket *sc = &t->socket;
|
||||
|
||||
@@ -263,7 +254,7 @@ static void put_recvmsg(struct smb_direct_transport *t,
|
||||
}
|
||||
|
||||
static void enqueue_reassembly(struct smb_direct_transport *t,
|
||||
struct smb_direct_recvmsg *recvmsg,
|
||||
struct smbdirect_recv_io *recvmsg,
|
||||
int data_length)
|
||||
{
|
||||
spin_lock(&t->reassembly_queue_lock);
|
||||
@@ -280,11 +271,11 @@ static void enqueue_reassembly(struct smb_direct_transport *t,
|
||||
spin_unlock(&t->reassembly_queue_lock);
|
||||
}
|
||||
|
||||
static struct smb_direct_recvmsg *get_first_reassembly(struct smb_direct_transport *t)
|
||||
static struct smbdirect_recv_io *get_first_reassembly(struct smb_direct_transport *t)
|
||||
{
|
||||
if (!list_empty(&t->reassembly_queue))
|
||||
return list_first_entry(&t->reassembly_queue,
|
||||
struct smb_direct_recvmsg, list);
|
||||
struct smbdirect_recv_io, list);
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
@@ -387,7 +378,7 @@ static void smb_direct_free_transport(struct ksmbd_transport *kt)
|
||||
static void free_transport(struct smb_direct_transport *t)
|
||||
{
|
||||
struct smbdirect_socket *sc = &t->socket;
|
||||
struct smb_direct_recvmsg *recvmsg;
|
||||
struct smbdirect_recv_io *recvmsg;
|
||||
|
||||
wake_up_interruptible(&t->wait_send_credits);
|
||||
|
||||
@@ -465,9 +456,9 @@ static void smb_direct_free_sendmsg(struct smb_direct_transport *t,
|
||||
mempool_free(msg, t->sendmsg_mempool);
|
||||
}
|
||||
|
||||
static int smb_direct_check_recvmsg(struct smb_direct_recvmsg *recvmsg)
|
||||
static int smb_direct_check_recvmsg(struct smbdirect_recv_io *recvmsg)
|
||||
{
|
||||
struct smbdirect_socket *sc = &recvmsg->transport->socket;
|
||||
struct smbdirect_socket *sc = recvmsg->socket;
|
||||
|
||||
switch (sc->recv_io.expected) {
|
||||
case SMBDIRECT_EXPECT_DATA_TRANSFER: {
|
||||
@@ -516,15 +507,15 @@ static int smb_direct_check_recvmsg(struct smb_direct_recvmsg *recvmsg)
|
||||
|
||||
static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
|
||||
{
|
||||
struct smb_direct_recvmsg *recvmsg;
|
||||
struct smbdirect_recv_io *recvmsg;
|
||||
struct smb_direct_transport *t;
|
||||
struct smbdirect_socket *sc;
|
||||
struct smbdirect_socket_parameters *sp;
|
||||
|
||||
recvmsg = container_of(wc->wr_cqe, struct smb_direct_recvmsg, cqe);
|
||||
t = recvmsg->transport;
|
||||
sc = &t->socket;
|
||||
recvmsg = container_of(wc->wr_cqe, struct smbdirect_recv_io, cqe);
|
||||
sc = recvmsg->socket;
|
||||
sp = &sc->parameters;
|
||||
t = container_of(sc, struct smb_direct_transport, socket);
|
||||
|
||||
if (wc->status != IB_WC_SUCCESS || wc->opcode != IB_WC_RECV) {
|
||||
put_recvmsg(t, recvmsg);
|
||||
@@ -645,7 +636,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
|
||||
}
|
||||
|
||||
static int smb_direct_post_recv(struct smb_direct_transport *t,
|
||||
struct smb_direct_recvmsg *recvmsg)
|
||||
struct smbdirect_recv_io *recvmsg)
|
||||
{
|
||||
struct smbdirect_socket *sc = &t->socket;
|
||||
struct smbdirect_socket_parameters *sp = &sc->parameters;
|
||||
@@ -684,7 +675,7 @@ static int smb_direct_post_recv(struct smb_direct_transport *t,
|
||||
static int smb_direct_read(struct ksmbd_transport *t, char *buf,
|
||||
unsigned int size, int unused)
|
||||
{
|
||||
struct smb_direct_recvmsg *recvmsg;
|
||||
struct smbdirect_recv_io *recvmsg;
|
||||
struct smbdirect_data_transfer *data_transfer;
|
||||
int to_copy, to_read, data_read, offset;
|
||||
u32 data_length, remaining_data_length, data_offset;
|
||||
@@ -721,7 +712,7 @@ static int smb_direct_read(struct ksmbd_transport *t, char *buf,
|
||||
offset = st->first_entry_offset;
|
||||
while (data_read < size) {
|
||||
recvmsg = get_first_reassembly(st);
|
||||
data_transfer = smb_direct_recvmsg_payload(recvmsg);
|
||||
data_transfer = smbdirect_recv_io_payload(recvmsg);
|
||||
data_length = le32_to_cpu(data_transfer->data_length);
|
||||
remaining_data_length =
|
||||
le32_to_cpu(data_transfer->remaining_data_length);
|
||||
@@ -813,7 +804,7 @@ static void smb_direct_post_recv_credits(struct work_struct *work)
|
||||
{
|
||||
struct smb_direct_transport *t = container_of(work,
|
||||
struct smb_direct_transport, post_recv_credits_work);
|
||||
struct smb_direct_recvmsg *recvmsg;
|
||||
struct smbdirect_recv_io *recvmsg;
|
||||
int receive_credits, credits = 0;
|
||||
int ret;
|
||||
|
||||
@@ -1746,7 +1737,7 @@ static int smb_direct_prepare_negotiation(struct smb_direct_transport *t)
|
||||
{
|
||||
struct smbdirect_socket *sc = &t->socket;
|
||||
int ret;
|
||||
struct smb_direct_recvmsg *recvmsg;
|
||||
struct smbdirect_recv_io *recvmsg;
|
||||
|
||||
sc->recv_io.expected = SMBDIRECT_EXPECT_NEGOTIATE_REQ;
|
||||
|
||||
@@ -1880,7 +1871,7 @@ static int smb_direct_init_params(struct smb_direct_transport *t,
|
||||
|
||||
static void smb_direct_destroy_pools(struct smb_direct_transport *t)
|
||||
{
|
||||
struct smb_direct_recvmsg *recvmsg;
|
||||
struct smbdirect_recv_io *recvmsg;
|
||||
|
||||
while ((recvmsg = get_free_recvmsg(t)))
|
||||
mempool_free(recvmsg, t->recvmsg_mempool);
|
||||
@@ -1904,7 +1895,7 @@ static int smb_direct_create_pools(struct smb_direct_transport *t)
|
||||
struct smbdirect_socket_parameters *sp = &sc->parameters;
|
||||
char name[80];
|
||||
int i;
|
||||
struct smb_direct_recvmsg *recvmsg;
|
||||
struct smbdirect_recv_io *recvmsg;
|
||||
|
||||
snprintf(name, sizeof(name), "smb_direct_rqst_pool_%p", t);
|
||||
t->sendmsg_cache = kmem_cache_create(name,
|
||||
@@ -1920,9 +1911,9 @@ static int smb_direct_create_pools(struct smb_direct_transport *t)
|
||||
if (!t->sendmsg_mempool)
|
||||
goto err;
|
||||
|
||||
snprintf(name, sizeof(name), "smb_direct_resp_%p", t);
|
||||
snprintf(name, sizeof(name), "smbdirect_recv_io_pool_%p", t);
|
||||
t->recvmsg_cache = kmem_cache_create(name,
|
||||
sizeof(struct smb_direct_recvmsg) +
|
||||
sizeof(struct smbdirect_recv_io) +
|
||||
sp->max_recv_size,
|
||||
0, SLAB_HWCACHE_ALIGN, NULL);
|
||||
if (!t->recvmsg_cache)
|
||||
@@ -1940,7 +1931,7 @@ static int smb_direct_create_pools(struct smb_direct_transport *t)
|
||||
recvmsg = mempool_alloc(t->recvmsg_mempool, KSMBD_DEFAULT_GFP);
|
||||
if (!recvmsg)
|
||||
goto err;
|
||||
recvmsg->transport = t;
|
||||
recvmsg->socket = sc;
|
||||
recvmsg->sge.length = 0;
|
||||
list_add(&recvmsg->list, &t->recvmsg_queue);
|
||||
}
|
||||
@@ -2045,7 +2036,7 @@ static int smb_direct_prepare(struct ksmbd_transport *t)
|
||||
struct smb_direct_transport *st = smb_trans_direct_transfort(t);
|
||||
struct smbdirect_socket *sc = &st->socket;
|
||||
struct smbdirect_socket_parameters *sp = &sc->parameters;
|
||||
struct smb_direct_recvmsg *recvmsg;
|
||||
struct smbdirect_recv_io *recvmsg;
|
||||
struct smbdirect_negotiate_req *req;
|
||||
int ret;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user