lkml.org 
[lkml]   [2020]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 046/271] IB/iser: Pass the correct number of entries for dma mapped SGL
    Date
    From: Israel Rukshin <israelr@mellanox.com>

    [ Upstream commit 57b26497fabe1b9379b59fbc7e35e608e114df16 ]

    ib_dma_map_sg() augments the SGL into a 'dma mapped SGL'. This process may
    change the number of entries and the lengths of each entry.

    Code that touches dma_address is iterating over the 'dma mapped SGL' and
    must use dma_nents which returned from ib_dma_map_sg().

    ib_sg_to_pages() and ib_map_mr_sg() are using dma_address so they must use
    dma_nents.

    Fixes: 39405885005a ("IB/iser: Port to new fast registration API")
    Fixes: bfe066e256d5 ("IB/iser: Reuse ib_sg_to_pages")
    Signed-off-by: Israel Rukshin <israelr@mellanox.com>
    Reviewed-by: Max Gurtovoy <maxg@mellanox.com>
    Acked-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/infiniband/ulp/iser/iser_memory.c | 10 +++++-----
    1 file changed, 5 insertions(+), 5 deletions(-)

    diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c
    index 9c3e9ab53a415..759c2fe033e71 100644
    --- a/drivers/infiniband/ulp/iser/iser_memory.c
    +++ b/drivers/infiniband/ulp/iser/iser_memory.c
    @@ -240,8 +240,8 @@ int iser_fast_reg_fmr(struct iscsi_iser_task *iser_task,
    page_vec->npages = 0;
    page_vec->fake_mr.page_size = SIZE_4K;
    plen = ib_sg_to_pages(&page_vec->fake_mr, mem->sg,
    - mem->size, NULL, iser_set_page);
    - if (unlikely(plen < mem->size)) {
    + mem->dma_nents, NULL, iser_set_page);
    + if (unlikely(plen < mem->dma_nents)) {
    iser_err("page vec too short to hold this SG\n");
    iser_data_buf_dump(mem, device->ib_device);
    iser_dump_page_vec(page_vec);
    @@ -450,10 +450,10 @@ static int iser_fast_reg_mr(struct iscsi_iser_task *iser_task,

    ib_update_fast_reg_key(mr, ib_inc_rkey(mr->rkey));

    - n = ib_map_mr_sg(mr, mem->sg, mem->size, NULL, SIZE_4K);
    - if (unlikely(n != mem->size)) {
    + n = ib_map_mr_sg(mr, mem->sg, mem->dma_nents, NULL, SIZE_4K);
    + if (unlikely(n != mem->dma_nents)) {
    iser_err("failed to map sg (%d/%d)\n",
    - n, mem->size);
    + n, mem->dma_nents);
    return n < 0 ? n : -EINVAL;
    }

    --
    2.20.1


    \
     
     \ /
      Last update: 2022-09-17 16:07    [W:5.279 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site