Merge tag 'rdma-for-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[firefly-linux-kernel-4.4.55.git] / drivers / infiniband / hw / qib / qib_ud.c
index a468bf2d446539d55d7175f8c41d2d28e5135b20..d6c7fe7f88d5ecd8b133e892e2f31e7f87bc74fb 100644 (file)
@@ -194,11 +194,7 @@ static void qib_ud_loopback(struct qib_qp *sqp, struct qib_swqe *swqe)
                }
                length -= len;
        }
-       while (qp->r_sge.num_sge) {
-               atomic_dec(&qp->r_sge.sge.mr->refcount);
-               if (--qp->r_sge.num_sge)
-                       qp->r_sge.sge = *qp->r_sge.sg_list++;
-       }
+       qib_put_ss(&qp->r_sge);
        if (!test_and_clear_bit(QIB_R_WRID_VALID, &qp->r_aflags))
                goto bail_unlock;
        wc.wr_id = qp->r_wr_id;
@@ -556,11 +552,7 @@ void qib_ud_rcv(struct qib_ibport *ibp, struct qib_ib_header *hdr,
        } else
                qib_skip_sge(&qp->r_sge, sizeof(struct ib_grh), 1);
        qib_copy_sge(&qp->r_sge, data, wc.byte_len - sizeof(struct ib_grh), 1);
-       while (qp->r_sge.num_sge) {
-               atomic_dec(&qp->r_sge.sge.mr->refcount);
-               if (--qp->r_sge.num_sge)
-                       qp->r_sge.sge = *qp->r_sge.sg_list++;
-       }
+       qib_put_ss(&qp->r_sge);
        if (!test_and_clear_bit(QIB_R_WRID_VALID, &qp->r_aflags))
                return;
        wc.wr_id = qp->r_wr_id;