IB/rxe: Update caller's CRC for RXE_MEM_TYPE_DMA memory type
authorLeon Romanovsky <leonro@mellanox.com>
Thu, 4 May 2017 12:36:07 +0000 (15:36 +0300)
committerDoug Ledford <dledford@redhat.com>
Thu, 4 May 2017 23:31:46 +0000 (19:31 -0400)
Callers of rxe_mem_copy() provide pointer to store updated CRC
value. That pointer was supposed to be updated, but the
commit cee2688e3cd6 ("IB/rxe: Offload CRC calculation when possible")
mistakenly removed that assignment for RXE_MEM_TYPE_DMA memory type.

The code worked because there are no actual callers with
RXE_MEM_TYPE_DMA, who are interested in returned value of crcp.
The one caller in read_reply(), who uses the returned crcp didn't
set RXE_MEM_TYPE_DMA as mem->type.

Fixes: cee2688e3cd6 ("IB/rxe: Offload CRC calculation when possible")
Reported-by: Andrew Boyer <andrew.boyer@dell.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Acked-by: Moni Shoua <monis@mellanox.com>
Reviewed-by: Andrew Boyer <andrew.boyer@dell.com>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/sw/rxe/rxe_mr.c

index ced15c4446bd90b4c8d13abaf21925423e7f4345..e37cc89987e12c1d99ed60fe1a8464e92f70b3cd 100644 (file)
@@ -368,7 +368,7 @@ int rxe_mem_copy(struct rxe_mem *mem, u64 iova, void *addr, int length,
                        ((void *)(uintptr_t)iova) : addr;
 
                if (crcp)
-                       crc = rxe_crc32(to_rdev(mem->pd->ibpd.device),
+                       *crcp = rxe_crc32(to_rdev(mem->pd->ibpd.device),
                                        *crcp, src, length);
 
                memcpy(dest, src, length);