RDMA/rw: switch to dma_map_sgtable()
authorLogan Gunthorpe <logang@deltatee.com>
Fri, 1 Oct 2021 21:32:15 +0000 (15:32 -0600)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 5 Oct 2021 17:49:58 +0000 (14:49 -0300)
commit8e913a8d89cd91fcc22b496b8329b0b093a6dec9
treebe84ad5e9e65a8e61e0fe1afe6edc92128efdb3f
parentb68362304bcfc697d755d29f8075ec6f24dece32
RDMA/rw: switch to dma_map_sgtable()

There are a couple of subtle error path bugs related to mapping the sgls:

- In rdma_rw_ctx_init(), dma_unmap would be called with an sg that could
  have been incremented from the original call, as well as an nents that
  is the dma mapped entries not the original number of nents called when
  mapped.

- Similarly in rdma_rw_ctx_signature_init, both sg and prot_sg were
  unmapped with the incorrect number of nents.

To fix this, switch to the sgtable interface for mapping which
conveniently stores the original nents for unmapping. This will get
cleaned up further once the dma mapping interface supports P2PDMA and
pci_p2pdma_map_sg() can be removed.

Fixes: 0e353e34e1e7 ("IB/core: add RW API support for signature MRs")
Fixes: a060b5629ab0 ("IB/core: generic RDMA READ/WRITE API")
Link: https://lore.kernel.org/r/20211001213215.3761-1-logang@deltatee.com
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/core/rw.c