int                     recv_credits;
        int                     recv_credit_target;
 
-       atomic_t                send_credits;
        spinlock_t              lock_new_recv_credits;
        int                     new_recv_credits;
        int                     max_rw_credits;
        int                     pages_per_rw_credit;
        atomic_t                rw_credits;
 
-       wait_queue_head_t       wait_send_credits;
        wait_queue_head_t       wait_rw_credits;
 
        struct work_struct      post_recv_credits_work;
 
        sc->ib.dev = sc->rdma.cm_id->device;
 
-       init_waitqueue_head(&t->wait_send_credits);
        init_waitqueue_head(&t->wait_rw_credits);
 
        spin_lock_init(&t->receive_credit_lock);
                                         sc->status == SMBDIRECT_SOCKET_DISCONNECTED);
        }
 
-       wake_up_all(&t->wait_send_credits);
+       wake_up_all(&sc->send_io.credits.wait_queue);
        wake_up_all(&sc->send_io.pending.zero_wait_queue);
 
        disable_work_sync(&t->post_recv_credits_work);
                t->recv_credit_target =
                                le16_to_cpu(data_transfer->credits_requested);
                atomic_add(le16_to_cpu(data_transfer->credits_granted),
-                          &t->send_credits);
+                          &sc->send_io.credits.count);
 
                if (le16_to_cpu(data_transfer->flags) &
                    SMBDIRECT_FLAG_RESPONSE_REQUESTED)
                        queue_work(smb_direct_wq, &t->send_immediate_work);
 
-               if (atomic_read(&t->send_credits) > 0)
-                       wake_up(&t->wait_send_credits);
+               if (atomic_read(&sc->send_io.credits.count) > 0)
+                       wake_up(&sc->send_io.credits.wait_queue);
 
                if (data_length) {
                        if (t->recv_credit_target > old_recv_credit_target)
                                      struct smb_direct_send_ctx *send_ctx,
                                      bool is_last)
 {
+       struct smbdirect_socket *sc = &t->socket;
        struct smbdirect_send_io *first, *last;
        int ret;
 
                                         send_ctx->need_invalidate_rkey,
                                         send_ctx->remote_key);
        } else {
-               atomic_add(send_ctx->wr_cnt, &t->send_credits);
-               wake_up(&t->wait_send_credits);
+               atomic_add(send_ctx->wr_cnt, &sc->send_io.credits.count);
+               wake_up(&sc->send_io.credits.wait_queue);
                list_for_each_entry_safe(first, last, &send_ctx->msg_list,
                                         sibling_list) {
                        smb_direct_free_sendmsg(t, first);
 static int wait_for_send_credits(struct smb_direct_transport *t,
                                 struct smb_direct_send_ctx *send_ctx)
 {
+       struct smbdirect_socket *sc = &t->socket;
        int ret;
 
        if (send_ctx &&
-           (send_ctx->wr_cnt >= 16 || atomic_read(&t->send_credits) <= 1)) {
+           (send_ctx->wr_cnt >= 16 || atomic_read(&sc->send_io.credits.count) <= 1)) {
                ret = smb_direct_flush_send_list(t, send_ctx, false);
                if (ret)
                        return ret;
        }
 
-       return wait_for_credits(t, &t->wait_send_credits, &t->send_credits, 1);
+       return wait_for_credits(t, &sc->send_io.credits.wait_queue, &sc->send_io.credits.count, 1);
 }
 
 static int wait_for_rw_credits(struct smb_direct_transport *t, int credits)
        ret = smb_direct_create_header(t, data_length, remaining_data_length,
                                       &msg);
        if (ret) {
-               atomic_inc(&t->send_credits);
+               atomic_inc(&sc->send_io.credits.count);
                return ret;
        }
 
        return 0;
 err:
        smb_direct_free_sendmsg(t, msg);
-       atomic_inc(&t->send_credits);
+       atomic_inc(&sc->send_io.credits.count);
        return ret;
 }
 
                smb_direct_disconnect_rdma_work(&sc->disconnect_work);
                wake_up_all(&sc->status_wait);
                wake_up_all(&sc->recv_io.reassembly.wait_queue);
-               wake_up_all(&t->wait_send_credits);
+               wake_up_all(&sc->send_io.credits.wait_queue);
                break;
        }
        case RDMA_CM_EVENT_CONNECT_ERROR: {
        t->new_recv_credits = 0;
 
        sp->send_credit_target = smb_direct_send_credit_target;
-       atomic_set(&t->send_credits, 0);
        atomic_set(&t->rw_credits, t->max_rw_credits);
 
        sp->max_send_size = smb_direct_max_send_size;