@@ -129,9 +129,6 @@ struct smb_direct_transport {
129
129
spinlock_t recvmsg_queue_lock ;
130
130
struct list_head recvmsg_queue ;
131
131
132
- spinlock_t empty_recvmsg_queue_lock ;
133
- struct list_head empty_recvmsg_queue ;
134
-
135
132
int send_credit_target ;
136
133
atomic_t send_credits ;
137
134
spinlock_t lock_new_recv_credits ;
@@ -276,32 +273,6 @@ static void put_recvmsg(struct smb_direct_transport *t,
276
273
spin_unlock (& t -> recvmsg_queue_lock );
277
274
}
278
275
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
-
305
276
static void enqueue_reassembly (struct smb_direct_transport * t ,
306
277
struct smb_direct_recvmsg * recvmsg ,
307
278
int data_length )
@@ -386,9 +357,6 @@ static struct smb_direct_transport *alloc_transport(struct rdma_cm_id *cm_id)
386
357
spin_lock_init (& t -> recvmsg_queue_lock );
387
358
INIT_LIST_HEAD (& t -> recvmsg_queue );
388
359
389
- spin_lock_init (& t -> empty_recvmsg_queue_lock );
390
- INIT_LIST_HEAD (& t -> empty_recvmsg_queue );
391
-
392
360
init_waitqueue_head (& t -> wait_send_pending );
393
361
atomic_set (& t -> send_pending , 0 );
394
362
@@ -554,7 +522,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
554
522
wc -> opcode );
555
523
smb_direct_disconnect_rdma_connection (t );
556
524
}
557
- put_empty_recvmsg (t , recvmsg );
525
+ put_recvmsg (t , recvmsg );
558
526
return ;
559
527
}
560
528
@@ -568,7 +536,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
568
536
switch (recvmsg -> type ) {
569
537
case SMB_DIRECT_MSG_NEGOTIATE_REQ :
570
538
if (wc -> byte_len < sizeof (struct smb_direct_negotiate_req )) {
571
- put_empty_recvmsg (t , recvmsg );
539
+ put_recvmsg (t , recvmsg );
572
540
return ;
573
541
}
574
542
t -> negotiation_requested = true;
@@ -585,15 +553,15 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
585
553
586
554
if (wc -> byte_len <
587
555
offsetof(struct smb_direct_data_transfer , padding )) {
588
- put_empty_recvmsg (t , recvmsg );
556
+ put_recvmsg (t , recvmsg );
589
557
return ;
590
558
}
591
559
592
560
data_length = le32_to_cpu (data_transfer -> data_length );
593
561
if (data_length ) {
594
562
if (wc -> byte_len < sizeof (struct smb_direct_data_transfer ) +
595
563
(u64 )data_length ) {
596
- put_empty_recvmsg (t , recvmsg );
564
+ put_recvmsg (t , recvmsg );
597
565
return ;
598
566
}
599
567
@@ -613,7 +581,7 @@ static void recv_done(struct ib_cq *cq, struct ib_wc *wc)
613
581
avail_recvmsg_count = t -> count_avail_recvmsg ;
614
582
spin_unlock (& t -> receive_credit_lock );
615
583
} else {
616
- put_empty_recvmsg (t , recvmsg );
584
+ put_recvmsg (t , recvmsg );
617
585
618
586
spin_lock (& t -> receive_credit_lock );
619
587
receive_credits = -- (t -> recv_credits );
@@ -811,26 +779,16 @@ static void smb_direct_post_recv_credits(struct work_struct *work)
811
779
struct smb_direct_recvmsg * recvmsg ;
812
780
int receive_credits , credits = 0 ;
813
781
int ret ;
814
- int use_free = 1 ;
815
782
816
783
spin_lock (& t -> receive_credit_lock );
817
784
receive_credits = t -> recv_credits ;
818
785
spin_unlock (& t -> receive_credit_lock );
819
786
820
787
if (receive_credits < t -> recv_credit_target ) {
821
788
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 ;
834
792
835
793
recvmsg -> type = SMB_DIRECT_MSG_DATA_TRANSFER ;
836
794
recvmsg -> first_segment = false;
@@ -1806,8 +1764,6 @@ static void smb_direct_destroy_pools(struct smb_direct_transport *t)
1806
1764
1807
1765
while ((recvmsg = get_free_recvmsg (t )))
1808
1766
mempool_free (recvmsg , t -> recvmsg_mempool );
1809
- while ((recvmsg = get_empty_recvmsg (t )))
1810
- mempool_free (recvmsg , t -> recvmsg_mempool );
1811
1767
1812
1768
mempool_destroy (t -> recvmsg_mempool );
1813
1769
t -> recvmsg_mempool = NULL ;
0 commit comments