@@ -44,13 +44,17 @@ static struct iser_reg_ops fastreg_ops = {
44
44
.free_reg_res = iser_free_fastreg_pool ,
45
45
.reg_rdma_mem = iser_reg_rdma_mem_fastreg ,
46
46
.unreg_rdma_mem = iser_unreg_mem_fastreg ,
47
+ .reg_desc_get = iser_reg_desc_get_fr ,
48
+ .reg_desc_put = iser_reg_desc_put_fr ,
47
49
};
48
50
49
51
static struct iser_reg_ops fmr_ops = {
50
52
.alloc_reg_res = iser_alloc_fmr_pool ,
51
53
.free_reg_res = iser_free_fmr_pool ,
52
54
.reg_rdma_mem = iser_reg_rdma_mem_fmr ,
53
55
.unreg_rdma_mem = iser_unreg_mem_fmr ,
56
+ .reg_desc_get = iser_reg_desc_get_fmr ,
57
+ .reg_desc_put = iser_reg_desc_put_fmr ,
54
58
};
55
59
56
60
int iser_assign_reg_ops (struct iser_device * device )
@@ -182,7 +186,7 @@ iser_copy_to_bounce(struct iser_data_buf *data)
182
186
}
183
187
184
188
struct iser_fr_desc *
185
- iser_reg_desc_get (struct ib_conn * ib_conn )
189
+ iser_reg_desc_get_fr (struct ib_conn * ib_conn )
186
190
{
187
191
struct iser_fr_pool * fr_pool = & ib_conn -> fr_pool ;
188
192
struct iser_fr_desc * desc ;
@@ -198,8 +202,8 @@ iser_reg_desc_get(struct ib_conn *ib_conn)
198
202
}
199
203
200
204
void
201
- iser_reg_desc_put (struct ib_conn * ib_conn ,
202
- struct iser_fr_desc * desc )
205
+ iser_reg_desc_put_fr (struct ib_conn * ib_conn ,
206
+ struct iser_fr_desc * desc )
203
207
{
204
208
struct iser_fr_pool * fr_pool = & ib_conn -> fr_pool ;
205
209
unsigned long flags ;
@@ -209,6 +213,21 @@ iser_reg_desc_put(struct ib_conn *ib_conn,
209
213
spin_unlock_irqrestore (& fr_pool -> lock , flags );
210
214
}
211
215
216
+ struct iser_fr_desc *
217
+ iser_reg_desc_get_fmr (struct ib_conn * ib_conn )
218
+ {
219
+ struct iser_fr_pool * fr_pool = & ib_conn -> fr_pool ;
220
+
221
+ return list_first_entry (& fr_pool -> list ,
222
+ struct iser_fr_desc , list );
223
+ }
224
+
225
+ void
226
+ iser_reg_desc_put_fmr (struct ib_conn * ib_conn ,
227
+ struct iser_fr_desc * desc )
228
+ {
229
+ }
230
+
212
231
/**
213
232
* iser_start_rdma_unaligned_sg
214
233
*/
@@ -544,13 +563,14 @@ void iser_unreg_mem_fmr(struct iscsi_iser_task *iser_task,
544
563
void iser_unreg_mem_fastreg (struct iscsi_iser_task * iser_task ,
545
564
enum iser_data_dir cmd_dir )
546
565
{
566
+ struct iser_device * device = iser_task -> iser_conn -> ib_conn .device ;
547
567
struct iser_mem_reg * reg = & iser_task -> rdma_reg [cmd_dir ];
548
568
549
569
if (!reg -> mem_h )
550
570
return ;
551
571
552
- iser_reg_desc_put (& iser_task -> iser_conn -> ib_conn ,
553
- reg -> mem_h );
572
+ device -> reg_ops -> reg_desc_put (& iser_task -> iser_conn -> ib_conn ,
573
+ reg -> mem_h );
554
574
reg -> mem_h = NULL ;
555
575
}
556
576
@@ -564,7 +584,6 @@ int iser_reg_rdma_mem_fmr(struct iscsi_iser_task *iser_task,
564
584
enum iser_data_dir cmd_dir )
565
585
{
566
586
struct ib_conn * ib_conn = & iser_task -> iser_conn -> ib_conn ;
567
- struct iser_fr_pool * fr_pool = & ib_conn -> fr_pool ;
568
587
struct iser_device * device = ib_conn -> device ;
569
588
struct ib_device * ibdev = device -> ib_device ;
570
589
struct iser_data_buf * mem = & iser_task -> data [cmd_dir ];
@@ -590,8 +609,7 @@ int iser_reg_rdma_mem_fmr(struct iscsi_iser_task *iser_task,
590
609
} else { /* use FMR for multiple dma entries */
591
610
struct iser_fr_desc * desc ;
592
611
593
- desc = list_first_entry (& fr_pool -> list ,
594
- struct iser_fr_desc , list );
612
+ desc = device -> reg_ops -> reg_desc_get (ib_conn );
595
613
err = iser_fast_reg_fmr (iser_task , mem , & desc -> rsc , mem_reg );
596
614
if (err && err != - EAGAIN ) {
597
615
iser_data_buf_dump (mem , ibdev );
@@ -844,7 +862,7 @@ int iser_reg_rdma_mem_fastreg(struct iscsi_iser_task *iser_task,
844
862
845
863
if (mem -> dma_nents != 1 ||
846
864
scsi_get_prot_op (iser_task -> sc ) != SCSI_PROT_NORMAL ) {
847
- desc = iser_reg_desc_get (ib_conn );
865
+ desc = device -> reg_ops -> reg_desc_get (ib_conn );
848
866
mem_reg -> mem_h = desc ;
849
867
}
850
868
@@ -887,7 +905,7 @@ int iser_reg_rdma_mem_fastreg(struct iscsi_iser_task *iser_task,
887
905
return 0 ;
888
906
err_reg :
889
907
if (desc )
890
- iser_reg_desc_put (ib_conn , desc );
908
+ device -> reg_ops -> reg_desc_put (ib_conn , desc );
891
909
892
910
return err ;
893
911
}
0 commit comments