@@ -546,7 +546,7 @@ static int srp_create_ch_ib(struct srp_rdma_ch *ch)
546
546
if (ret )
547
547
goto err_qp ;
548
548
549
- if (dev -> use_fast_reg && dev -> has_fr ) {
549
+ if (dev -> use_fast_reg ) {
550
550
fr_pool = srp_alloc_fr_pool (target );
551
551
if (IS_ERR (fr_pool )) {
552
552
ret = PTR_ERR (fr_pool );
@@ -557,7 +557,7 @@ static int srp_create_ch_ib(struct srp_rdma_ch *ch)
557
557
if (ch -> fr_pool )
558
558
srp_destroy_fr_pool (ch -> fr_pool );
559
559
ch -> fr_pool = fr_pool ;
560
- } else if (! dev -> use_fast_reg && dev -> has_fmr ) {
560
+ } else if (dev -> use_fmr ) {
561
561
fmr_pool = srp_alloc_fmr_pool (target );
562
562
if (IS_ERR (fmr_pool )) {
563
563
ret = PTR_ERR (fmr_pool );
@@ -623,7 +623,7 @@ static void srp_free_ch_ib(struct srp_target_port *target,
623
623
if (dev -> use_fast_reg ) {
624
624
if (ch -> fr_pool )
625
625
srp_destroy_fr_pool (ch -> fr_pool );
626
- } else {
626
+ } else if ( dev -> use_fmr ) {
627
627
if (ch -> fmr_pool )
628
628
ib_destroy_fmr_pool (ch -> fmr_pool );
629
629
}
@@ -1085,7 +1085,7 @@ static void srp_unmap_data(struct scsi_cmnd *scmnd,
1085
1085
if (req -> nmdesc )
1086
1086
srp_fr_pool_put (ch -> fr_pool , req -> fr_list ,
1087
1087
req -> nmdesc );
1088
- } else {
1088
+ } else if ( dev -> use_fmr ) {
1089
1089
struct ib_pool_fmr * * pfmr ;
1090
1090
1091
1091
for (i = req -> nmdesc , pfmr = req -> fmr_list ; i > 0 ; i -- , pfmr ++ )
@@ -1345,17 +1345,19 @@ static int srp_finish_mapping(struct srp_map_state *state,
1345
1345
struct srp_rdma_ch * ch )
1346
1346
{
1347
1347
struct srp_target_port * target = ch -> target ;
1348
+ struct srp_device * dev = target -> srp_host -> srp_dev ;
1348
1349
int ret = 0 ;
1349
1350
1351
+ WARN_ON_ONCE (!dev -> use_fast_reg && !dev -> use_fmr );
1352
+
1350
1353
if (state -> npages == 0 )
1351
1354
return 0 ;
1352
1355
1353
1356
if (state -> npages == 1 && !register_always )
1354
1357
srp_map_desc (state , state -> base_dma_addr , state -> dma_len ,
1355
1358
target -> rkey );
1356
1359
else
1357
- ret = target -> srp_host -> srp_dev -> use_fast_reg ?
1358
- srp_map_finish_fr (state , ch ) :
1360
+ ret = dev -> use_fast_reg ? srp_map_finish_fr (state , ch ) :
1359
1361
srp_map_finish_fmr (state , ch );
1360
1362
1361
1363
if (ret == 0 ) {
@@ -1417,21 +1419,18 @@ static int srp_map_sg(struct srp_map_state *state, struct srp_rdma_ch *ch,
1417
1419
struct srp_device * dev = target -> srp_host -> srp_dev ;
1418
1420
struct scatterlist * sg ;
1419
1421
int i , ret ;
1420
- bool use_mr ;
1421
1422
1422
1423
state -> desc = req -> indirect_desc ;
1423
1424
state -> pages = req -> map_page ;
1424
1425
if (dev -> use_fast_reg ) {
1425
1426
state -> fr .next = req -> fr_list ;
1426
1427
state -> fr .end = req -> fr_list + target -> cmd_sg_cnt ;
1427
- use_mr = !!ch -> fr_pool ;
1428
- } else {
1428
+ } else if (dev -> use_fmr ) {
1429
1429
state -> fmr .next = req -> fmr_list ;
1430
1430
state -> fmr .end = req -> fmr_list + target -> cmd_sg_cnt ;
1431
- use_mr = !!ch -> fmr_pool ;
1432
1431
}
1433
1432
1434
- if (use_mr ) {
1433
+ if (dev -> use_fast_reg || dev -> use_fmr ) {
1435
1434
for_each_sg (scat , sg , count , i ) {
1436
1435
ret = srp_map_sg_entry (state , ch , sg , i );
1437
1436
if (ret )
@@ -3364,6 +3363,7 @@ static void srp_add_one(struct ib_device *device)
3364
3363
3365
3364
srp_dev -> use_fast_reg = (srp_dev -> has_fr &&
3366
3365
(!srp_dev -> has_fmr || prefer_fr ));
3366
+ srp_dev -> use_fmr = !srp_dev -> use_fast_reg && srp_dev -> has_fmr ;
3367
3367
3368
3368
/*
3369
3369
* Use the smallest page size supported by the HCA, down to a
0 commit comments