mlx5_core: Fix signature handover operation for interleaved buffers
authorSagi Grimberg <sagig@mellanox.com>
Sun, 18 May 2014 15:32:38 +0000 (18:32 +0300)
committerRoland Dreier <roland@purestorage.com>
Tue, 27 May 2014 18:52:54 +0000 (11:52 -0700)
When the data and protection are interleaved in the memory domain, no
need to expand the mkey total length.

At the moment no Linux user works (iSER initiator & target) in
interleaved mode. This may change in the future as for SCSI
pass-through devices there is no real point in target performing
de-interleaving and re-interleaving of the protection data in the PT
stage. Regardless, signature verbs support this mode.

Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/mlx5/qp.c

index dc930ed21eca66c17114ce27a79f2a6b7d7e0170..74ee4a474e68b87ecf24675a14756e5d53f1fede 100644 (file)
@@ -2275,7 +2275,10 @@ static int set_sig_umr_wr(struct ib_send_wr *wr, struct mlx5_ib_qp *qp,
 
        /* length of the protected region, data + protection */
        region_len = wr->sg_list->length;
-       if (wr->wr.sig_handover.prot)
+       if (wr->wr.sig_handover.prot &&
+           (wr->wr.sig_handover.prot->lkey != wr->sg_list->lkey  ||
+            wr->wr.sig_handover.prot->addr != wr->sg_list->addr  ||
+            wr->wr.sig_handover.prot->length != wr->sg_list->length))
                region_len += wr->wr.sig_handover.prot->length;
 
        /**