Skip to content

Commit 01027a6

Browse files
metze-sambasmfrench
authored andcommitted
smb: server: remove separate empty_recvmsg_queue
There's no need to maintain two lists, we can just have a single list of receive buffers, which are free to use. Cc: Steve French <[email protected]> Cc: Tom Talpey <[email protected]> Cc: [email protected] Cc: [email protected] Fixes: 0626e66 ("cifsd: add server handler for central processing and tranport layers") Signed-off-by: Stefan Metzmacher <[email protected]> Acked-by: Namjae Jeon <[email protected]> Signed-off-by: Steve French <[email protected]>
1 parent e5cf61f commit 01027a6

File tree

1 file changed

+8
-52
lines changed

1 file changed

+8
-52
lines changed

fs/smb/server/transport_rdma.c

Lines changed: 8 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,6 @@ struct smb_direct_transport {
129129
spinlock_t recvmsg_queue_lock;
130130
struct list_head recvmsg_queue;
131131

132-
spinlock_t empty_recvmsg_queue_lock;
133-
struct list_head empty_recvmsg_queue;
134-
135132
int send_credit_target;
136133
atomic_t send_credits;
137134
spinlock_t lock_new_recv_credits;
@@ -276,32 +273,6 @@ static void put_recvmsg(struct smb_direct_transport *t,
276273
spin_unlock(&t->recvmsg_queue_lock);
277274
}
278275

279-
static struct
280-
smb_direct_recvmsg *get_empty_recvmsg(struct smb_direct_transport *t)
281-
{
282-
struct smb_direct_recvmsg *recvmsg = NULL;
283-
284-
spin_lock(&t->empty_recvmsg_queue_lock);
285-
if (!list_empty(&t->empty_recvmsg_queue)) {
286-
recvmsg = list_first_entry(&t->empty_recvmsg_queue,
287-
struct smb_direct_recvmsg, list);
288-
list_del(&recvmsg->list);
289-
}
290-
spin_unlock(&t->empty_recvmsg_queue_lock);
291-
return recvmsg;
292-
}
293-
294-
static void put_empty_recvmsg(struct smb_direct_transport *t,
295-
struct smb_direct_recvmsg *recvmsg)
296-
{
297-
ib_dma_unmap_single(t->cm_id->device, recvmsg->sge.addr,
298-
recvmsg->sge.length, DMA_FROM_DEVICE);
299-
300-
spin_lock(&t->empty_recvmsg_queue_lock);
301-
list_add_tail(&recvmsg->list, &t->empty_recvmsg_queue);
302-
spin_unlock(&t->empty_recvmsg_queue_lock);
303-
}
304-
305276
static void enqueue_reassembly(struct smb_direct_transport *t,
306277
struct smb_direct_recvmsg *recvmsg,
307278
int data_length)
@@ -386,9 +357,6 @@ static struct smb_direct_transport *alloc_transport(struct rdma_cm_id *cm_id)
386357
spin_lock_init(&t->recvmsg_queue_lock);
387358
INIT_LIST_HEAD(&t->recvmsg_queue);
388359

389-
spin_lock_init(&t->empty_recvmsg_queue_lock);
390-
INIT_LIST_HEAD(&t->empty_recvmsg_queue);
391-
392360
init_waitqueue_head(&t->wait_send_pending);
393361
atomic_set(&t->send_pending, 0);
394362

@@ -554,7 +522,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
554522
wc->opcode);
555523
smb_direct_disconnect_rdma_connection(t);
556524
}
557-
put_empty_recvmsg(t, recvmsg);
525+
put_recvmsg(t, recvmsg);
558526
return;
559527
}
560528

@@ -568,7 +536,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
568536
switch (recvmsg->type) {
569537
case SMB_DIRECT_MSG_NEGOTIATE_REQ:
570538
if (wc->byte_len < sizeof(struct smb_direct_negotiate_req)) {
571-
put_empty_recvmsg(t, recvmsg);
539+
put_recvmsg(t, recvmsg);
572540
return;
573541
}
574542
t->negotiation_requested = true;
@@ -585,15 +553,15 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
585553

586554
if (wc->byte_len <
587555
offsetof(struct smb_direct_data_transfer, padding)) {
588-
put_empty_recvmsg(t, recvmsg);
556+
put_recvmsg(t, recvmsg);
589557
return;
590558
}
591559

592560
data_length = le32_to_cpu(data_transfer->data_length);
593561
if (data_length) {
594562
if (wc->byte_len < sizeof(struct smb_direct_data_transfer) +
595563
(u64)data_length) {
596-
put_empty_recvmsg(t, recvmsg);
564+
put_recvmsg(t, recvmsg);
597565
return;
598566
}
599567

@@ -613,7 +581,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
613581
avail_recvmsg_count = t->count_avail_recvmsg;
614582
spin_unlock(&t->receive_credit_lock);
615583
} else {
616-
put_empty_recvmsg(t, recvmsg);
584+
put_recvmsg(t, recvmsg);
617585

618586
spin_lock(&t->receive_credit_lock);
619587
receive_credits = --(t->recv_credits);
@@ -811,26 +779,16 @@ static void smb_direct_post_recv_credits(struct work_struct *work)
811779
struct smb_direct_recvmsg *recvmsg;
812780
int receive_credits, credits = 0;
813781
int ret;
814-
int use_free = 1;
815782

816783
spin_lock(&t->receive_credit_lock);
817784
receive_credits = t->recv_credits;
818785
spin_unlock(&t->receive_credit_lock);
819786

820787
if (receive_credits < t->recv_credit_target) {
821788
while (true) {
822-
if (use_free)
823-
recvmsg = get_free_recvmsg(t);
824-
else
825-
recvmsg = get_empty_recvmsg(t);
826-
if (!recvmsg) {
827-
if (use_free) {
828-
use_free = 0;
829-
continue;
830-
} else {
831-
break;
832-
}
833-
}
789+
recvmsg = get_free_recvmsg(t);
790+
if (!recvmsg)
791+
break;
834792

835793
recvmsg->type = SMB_DIRECT_MSG_DATA_TRANSFER;
836794
recvmsg->first_segment = false;
@@ -1806,8 +1764,6 @@ static void smb_direct_destroy_pools(struct smb_direct_transport *t)
18061764

18071765
while ((recvmsg = get_free_recvmsg(t)))
18081766
mempool_free(recvmsg, t->recvmsg_mempool);
1809-
while ((recvmsg = get_empty_recvmsg(t)))
1810-
mempool_free(recvmsg, t->recvmsg_mempool);
18111767

18121768
mempool_destroy(t->recvmsg_mempool);
18131769
t->recvmsg_mempool = NULL;

0 commit comments

Comments
 (0)