Skip to content

Commit 3ae95da

Browse files
Bart Van Asschedledford
authored andcommitted
IB/srp: Remove use_mr argument from srp_map_sg_entry()
Move the srp_map_desc() call from inside srp_map_sg_entry() to srp_map_sg() such that the use_mr argument can be removed from srp_map_sg_entry(). Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
1 parent 0e0d3a4 commit 3ae95da

File tree

1 file changed

+15
-21
lines changed

1 file changed

+15
-21
lines changed

drivers/infiniband/ulp/srp/ib_srp.c

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1260,6 +1260,8 @@ static void srp_map_desc(struct srp_map_state *state, dma_addr_t dma_addr,
12601260
{
12611261
struct srp_direct_buf *desc = state->desc;
12621262

1263+
WARN_ON_ONCE(!dma_len);
1264+
12631265
desc->va = cpu_to_be64(dma_addr);
12641266
desc->key = cpu_to_be32(rkey);
12651267
desc->len = cpu_to_be32(dma_len);
@@ -1366,29 +1368,17 @@ static int srp_finish_mapping(struct srp_map_state *state,
13661368

13671369
static int srp_map_sg_entry(struct srp_map_state *state,
13681370
struct srp_rdma_ch *ch,
1369-
struct scatterlist *sg, int sg_index,
1370-
bool use_mr)
1371+
struct scatterlist *sg, int sg_index)
13711372
{
13721373
struct srp_target_port *target = ch->target;
13731374
struct srp_device *dev = target->srp_host->srp_dev;
13741375
struct ib_device *ibdev = dev->dev;
13751376
dma_addr_t dma_addr = ib_sg_dma_address(ibdev, sg);
13761377
unsigned int dma_len = ib_sg_dma_len(ibdev, sg);
1377-
unsigned int len;
1378+
unsigned int len = 0;
13781379
int ret;
13791380

1380-
if (!dma_len)
1381-
return 0;
1382-
1383-
if (!use_mr) {
1384-
/*
1385-
* Once we're in direct map mode for a request, we don't
1386-
* go back to FMR or FR mode, so no need to update anything
1387-
* other than the descriptor.
1388-
*/
1389-
srp_map_desc(state, dma_addr, dma_len, target->rkey);
1390-
return 0;
1391-
}
1381+
WARN_ON_ONCE(!dma_len);
13921382

13931383
while (dma_len) {
13941384
unsigned offset = dma_addr & ~dev->mr_page_mask;
@@ -1441,16 +1431,20 @@ static int srp_map_sg(struct srp_map_state *state, struct srp_rdma_ch *ch,
14411431
use_mr = !!ch->fmr_pool;
14421432
}
14431433

1444-
for_each_sg(scat, sg, count, i) {
1445-
ret = srp_map_sg_entry(state, ch, sg, i, use_mr);
1446-
if (ret)
1447-
goto out;
1448-
}
1449-
14501434
if (use_mr) {
1435+
for_each_sg(scat, sg, count, i) {
1436+
ret = srp_map_sg_entry(state, ch, sg, i);
1437+
if (ret)
1438+
goto out;
1439+
}
14511440
ret = srp_finish_mapping(state, ch);
14521441
if (ret)
14531442
goto out;
1443+
} else {
1444+
for_each_sg(scat, sg, count, i) {
1445+
srp_map_desc(state, ib_sg_dma_address(dev->dev, sg),
1446+
ib_sg_dma_len(dev->dev, sg), target->rkey);
1447+
}
14541448
}
14551449

14561450
req->nmdesc = state->nmdesc;

0 commit comments

Comments
 (0)