@@ -1364,15 +1364,6 @@ static int srp_finish_mapping(struct srp_map_state *state,
1364
1364
return ret ;
1365
1365
}
1366
1366
1367
- static void srp_map_update_start (struct srp_map_state * state ,
1368
- struct scatterlist * sg , int sg_index ,
1369
- dma_addr_t dma_addr )
1370
- {
1371
- state -> unmapped_sg = sg ;
1372
- state -> unmapped_index = sg_index ;
1373
- state -> unmapped_addr = dma_addr ;
1374
- }
1375
-
1376
1367
static int srp_map_sg_entry (struct srp_map_state * state ,
1377
1368
struct srp_rdma_ch * ch ,
1378
1369
struct scatterlist * sg , int sg_index ,
@@ -1399,23 +1390,12 @@ static int srp_map_sg_entry(struct srp_map_state *state,
1399
1390
return 0 ;
1400
1391
}
1401
1392
1402
- /*
1403
- * If this is the first sg that will be mapped via FMR or via FR, save
1404
- * our position. We need to know the first unmapped entry, its index,
1405
- * and the first unmapped address within that entry to be able to
1406
- * restart mapping after an error.
1407
- */
1408
- if (!state -> unmapped_sg )
1409
- srp_map_update_start (state , sg , sg_index , dma_addr );
1410
-
1411
1393
while (dma_len ) {
1412
1394
unsigned offset = dma_addr & ~dev -> mr_page_mask ;
1413
1395
if (state -> npages == dev -> max_pages_per_mr || offset != 0 ) {
1414
1396
ret = srp_finish_mapping (state , ch );
1415
1397
if (ret )
1416
1398
return ret ;
1417
-
1418
- srp_map_update_start (state , sg , sg_index , dma_addr );
1419
1399
}
1420
1400
1421
1401
len = min_t (unsigned int , dma_len , dev -> mr_page_size - offset );
@@ -1434,11 +1414,8 @@ static int srp_map_sg_entry(struct srp_map_state *state,
1434
1414
* boundries.
1435
1415
*/
1436
1416
ret = 0 ;
1437
- if (len != dev -> mr_page_size ) {
1417
+ if (len != dev -> mr_page_size )
1438
1418
ret = srp_finish_mapping (state , ch );
1439
- if (!ret )
1440
- srp_map_update_start (state , NULL , 0 , 0 );
1441
- }
1442
1419
return ret ;
1443
1420
}
1444
1421
@@ -1448,9 +1425,8 @@ static int srp_map_sg(struct srp_map_state *state, struct srp_rdma_ch *ch,
1448
1425
{
1449
1426
struct srp_target_port * target = ch -> target ;
1450
1427
struct srp_device * dev = target -> srp_host -> srp_dev ;
1451
- struct ib_device * ibdev = dev -> dev ;
1452
1428
struct scatterlist * sg ;
1453
- int i ;
1429
+ int i , ret ;
1454
1430
bool use_mr ;
1455
1431
1456
1432
state -> desc = req -> indirect_desc ;
@@ -1466,34 +1442,22 @@ static int srp_map_sg(struct srp_map_state *state, struct srp_rdma_ch *ch,
1466
1442
}
1467
1443
1468
1444
for_each_sg (scat , sg , count , i ) {
1469
- if (srp_map_sg_entry (state , ch , sg , i , use_mr )) {
1470
- /*
1471
- * Memory registration failed, so backtrack to the
1472
- * first unmapped entry and continue on without using
1473
- * memory registration.
1474
- */
1475
- dma_addr_t dma_addr ;
1476
- unsigned int dma_len ;
1477
-
1478
- backtrack :
1479
- sg = state -> unmapped_sg ;
1480
- i = state -> unmapped_index ;
1481
-
1482
- dma_addr = ib_sg_dma_address (ibdev , sg );
1483
- dma_len = ib_sg_dma_len (ibdev , sg );
1484
- dma_len -= (state -> unmapped_addr - dma_addr );
1485
- dma_addr = state -> unmapped_addr ;
1486
- use_mr = false;
1487
- srp_map_desc (state , dma_addr , dma_len , target -> rkey );
1488
- }
1445
+ ret = srp_map_sg_entry (state , ch , sg , i , use_mr );
1446
+ if (ret )
1447
+ goto out ;
1489
1448
}
1490
1449
1491
- if (use_mr && srp_finish_mapping (state , ch ))
1492
- goto backtrack ;
1450
+ if (use_mr ) {
1451
+ ret = srp_finish_mapping (state , ch );
1452
+ if (ret )
1453
+ goto out ;
1454
+ }
1493
1455
1494
1456
req -> nmdesc = state -> nmdesc ;
1457
+ ret = 0 ;
1495
1458
1496
- return 0 ;
1459
+ out :
1460
+ return ret ;
1497
1461
}
1498
1462
1499
1463
static int srp_map_data (struct scsi_cmnd * scmnd , struct srp_rdma_ch * ch ,
0 commit comments