ret = rds_cmsg_rdma_map(rs, rm, cmsg);
                        if (!ret)
                                *allocated_mr = 1;
+                       else if (ret == -ENODEV)
+                               /* Accommodate the get_mr() case which can fail
+                                * if connection isn't established yet.
+                                */
+                               ret = -EAGAIN;
                        break;
                case RDS_CMSG_ATOMIC_CSWP:
                case RDS_CMSG_ATOMIC_FADD:
 
        /* Parse any control messages the user may have included. */
        ret = rds_cmsg_send(rs, rm, msg, &allocated_mr);
-       if (ret)
+       if (ret) {
+               /* Trigger connection so that its ready for the next retry */
+               if (ret ==  -EAGAIN)
+                       rds_conn_connect_if_down(conn);
                goto out;
+       }
 
        if (rm->rdma.op_active && !conn->c_trans->xmit_rdma) {
                printk_ratelimited(KERN_NOTICE "rdma_op %p conn xmit_rdma %p\n",