]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Applied 'kernel_patches/fixes/sdp_post_credits.patch'
authorVladimir Sokolovsky <vlad@mellanox.co.il>
Tue, 4 Dec 2007 13:49:25 +0000 (15:49 +0200)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:04:13 +0000 (05:04 -0700)
Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp.h
drivers/infiniband/ulp/sdp/sdp_bcopy.c
drivers/infiniband/ulp/sdp/sdp_cma.c

index c1cc57993f03d81ce7a87db45c9a6deafec45d8c..31966eb505551a28cdea76d616d63205bad3873c 100644 (file)
@@ -248,6 +248,7 @@ void sdp_reset_sk(struct sock *sk, int rc);
 void sdp_time_wait_destroy_sk(struct sdp_sock *ssk);
 void sdp_completion_handler(struct ib_cq *cq, void *cq_context);
 void sdp_work(struct work_struct *work);
+int sdp_post_credits(struct sdp_sock *ssk);
 void sdp_post_send(struct sdp_sock *ssk, struct sk_buff *skb, u8 mid);
 void sdp_post_recvs(struct sdp_sock *ssk);
 int sdp_poll_cq(struct sdp_sock *ssk, struct ib_cq *cq);
index bcc2ac8f9487bef3aad45db9270600647cd82b1b..5bc20fad5e73868e9c9341f26b7eee69cc74c6dd 100644 (file)
@@ -443,6 +443,21 @@ static inline int sdp_nagle_off(struct sdp_sock *ssk, struct sk_buff *skb)
                (TCP_SKB_CB(skb)->flags & TCPCB_FLAG_PSH);
 }
 
+int sdp_post_credits(struct sdp_sock *ssk)
+{
+       if (likely(ssk->bufs > 1) &&
+           likely(ssk->tx_head - ssk->tx_tail < SDP_TX_SIZE)) {
+               struct sk_buff *skb;
+               skb = sk_stream_alloc_skb(&ssk->isk.sk,
+                                         sizeof(struct sdp_bsdh),
+                                         GFP_KERNEL);
+               if (!skb)
+                       return -ENOMEM;
+               sdp_post_send(ssk, skb, SDP_MID_DATA);
+       }
+       return 0;
+}
+
 void sdp_post_sends(struct sdp_sock *ssk, int nonagle)
 {
        /* TODO: nonagle? */
index 3b0508ab744e4ca44a4dd3349b12553819ad9801..0cab38bb9fbaa6d688910c75b86499815bfd2c21 100644 (file)
@@ -472,6 +472,9 @@ int sdp_cma_handler(struct rdma_cm_id *id, struct rdma_cm_event *event)
                        rdma_reject(id, NULL, 0);
                else
                        rc = rdma_accept(id, NULL);
+
+               if (!rc)
+                       rc = sdp_post_credits(sdp_sk(sk));
                break;
        case RDMA_CM_EVENT_CONNECT_ERROR:
                sdp_dbg(sk, "RDMA_CM_EVENT_CONNECT_ERROR\n");