These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / net / rds / rdma.c
index 40084d8..4c93bad 100644 (file)
@@ -435,9 +435,10 @@ void rds_rdma_unuse(struct rds_sock *rs, u32 r_key, int force)
 
        /* If the MR was marked as invalidate, this will
         * trigger an async flush. */
-       if (zot_me)
+       if (zot_me) {
                rds_destroy_mr(mr);
-       rds_mr_put(mr);
+               rds_mr_put(mr);
+       }
 }
 
 void rds_rdma_free_op(struct rm_rdma_op *ro)
@@ -451,7 +452,7 @@ void rds_rdma_free_op(struct rm_rdma_op *ro)
                 * is the case for a RDMA_READ which copies from remote
                 * to local memory */
                if (!ro->op_write) {
-                       BUG_ON(irqs_disabled());
+                       WARN_ON(!page->mapping && irqs_disabled());
                        set_page_dirty(page);
                }
                put_page(page);
@@ -658,6 +659,8 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
                ret = rds_pin_pages(iov->addr, nr, pages, !op->op_write);
                if (ret < 0)
                        goto out;
+               else
+                       ret = 0;
 
                rdsdebug("RDS: nr_bytes %u nr %u iov->bytes %llu iov->addr %llx\n",
                         nr_bytes, nr, iov->bytes, iov->addr);