* @seg: memory region co-ordinates
  * @nsegs: number of segments remaining
  * @writing: true when RDMA Write will be used
+ * @xid: XID of RPC using the registered memory
  * @out: initialized MR
  *
  * Prepare a REG_MR Work Request to register a memory region
  */
 struct rpcrdma_mr_seg *frwr_map(struct rpcrdma_xprt *r_xprt,
                                struct rpcrdma_mr_seg *seg,
-                               int nsegs, bool writing,
+                               int nsegs, bool writing, u32 xid,
                                struct rpcrdma_mr **out)
 {
        struct rpcrdma_ia *ia = &r_xprt->rx_ia;
        if (unlikely(n != mr->mr_nents))
                goto out_mapmr_err;
 
+       ibmr->iova &= 0x00000000ffffffff;
+       ibmr->iova |= ((u64)cpu_to_be32(xid)) << 32;
        key = (u8)(ibmr->rkey & 0x000000FF);
        ib_update_fast_reg_key(ibmr, ++key);
 
 
                return nsegs;
 
        do {
-               seg = frwr_map(r_xprt, seg, nsegs, false, &mr);
+               seg = frwr_map(r_xprt, seg, nsegs, false, rqst->rq_xid, &mr);
                if (IS_ERR(seg))
                        return PTR_ERR(seg);
                rpcrdma_mr_push(mr, &req->rl_registered);
 
        nchunks = 0;
        do {
-               seg = frwr_map(r_xprt, seg, nsegs, true, &mr);
+               seg = frwr_map(r_xprt, seg, nsegs, true, rqst->rq_xid, &mr);
                if (IS_ERR(seg))
                        return PTR_ERR(seg);
                rpcrdma_mr_push(mr, &req->rl_registered);
 
        nchunks = 0;
        do {
-               seg = frwr_map(r_xprt, seg, nsegs, true, &mr);
+               seg = frwr_map(r_xprt, seg, nsegs, true, rqst->rq_xid, &mr);
                if (IS_ERR(seg))
                        return PTR_ERR(seg);
                rpcrdma_mr_push(mr, &req->rl_registered);
 
 size_t frwr_maxpages(struct rpcrdma_xprt *r_xprt);
 struct rpcrdma_mr_seg *frwr_map(struct rpcrdma_xprt *r_xprt,
                                struct rpcrdma_mr_seg *seg,
-                               int nsegs, bool writing,
+                               int nsegs, bool writing, u32 xid,
                                struct rpcrdma_mr **mr);
 int frwr_send(struct rpcrdma_ia *ia, struct rpcrdma_req *req);
 void frwr_reminv(struct rpcrdma_rep *rep, struct list_head *mrs);