@@ -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-
305276static 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