Lines Matching refs:ssk

105 sdp_nagle_off(struct sdp_sock *ssk, struct mbuf *mb)
116 (ssk->flags & SDP_NODELAY) ||
117 !ssk->nagle_last_unacked ||
118 mb->m_pkthdr.len >= ssk->xmit_size_goal / 4 ||
122 unsigned long mseq = ring_head(ssk->tx_ring);
123 ssk->nagle_last_unacked = mseq;
125 if (!callout_pending(&ssk->nagle_timer)) {
126 callout_reset(&ssk->nagle_timer, SDP_NAGLE_TIMEOUT,
127 sdp_nagle_timeout, ssk);
128 sdp_dbg_data(ssk->socket, "Starting nagle timer\n");
131 sdp_dbg_data(ssk->socket, "send_now = %d last_unacked = %ld\n",
132 send_now, ssk->nagle_last_unacked);
140 struct sdp_sock *ssk = (struct sdp_sock *)data;
141 struct socket *sk = ssk->socket;
143 sdp_dbg_data(sk, "last_unacked = %ld\n", ssk->nagle_last_unacked);
145 if (!callout_active(&ssk->nagle_timer))
147 callout_deactivate(&ssk->nagle_timer);
149 if (!ssk->nagle_last_unacked)
151 if (ssk->state == TCPS_CLOSED)
153 ssk->nagle_last_unacked = 0;
154 sdp_post_sends(ssk, M_NOWAIT);
156 sowwakeup(ssk->socket);
159 callout_reset(&ssk->nagle_timer, SDP_NAGLE_TIMEOUT,
160 sdp_nagle_timeout, ssk);
164 sdp_post_sends(struct sdp_sock *ssk, int wait)
171 sk = ssk->socket;
172 if (unlikely(!ssk->id)) {
174 sdp_dbg(ssk->socket,
176 sdp_notify(ssk, ECONNRESET);
181 if (sdp_tx_ring_slots_left(ssk) < SDP_TX_SIZE / 2)
182 sdp_xmit_poll(ssk, 1);
184 if (ssk->recv_request &&
185 ring_tail(ssk->rx_ring) >= ssk->recv_request_head &&
186 tx_credits(ssk) >= SDP_MIN_TX_CREDITS &&
187 sdp_tx_ring_slots_left(ssk)) {
189 ssk->recv_bytes - SDP_HEAD_SIZE, wait);
192 ssk->recv_request = 0;
193 sdp_post_send(ssk, mb);
197 if (tx_credits(ssk) <= SDP_MIN_TX_CREDITS &&
198 sdp_tx_ring_slots_left(ssk) && sk->so_snd.sb_sndptr &&
199 sdp_nagle_off(ssk, sk->so_snd.sb_sndptr)) {
203 while (tx_credits(ssk) > SDP_MIN_TX_CREDITS &&
204 sdp_tx_ring_slots_left(ssk) && (mb = sk->so_snd.sb_sndptr) &&
205 sdp_nagle_off(ssk, mb)) {
216 sdp_post_send(ssk, mb);
220 if (credit_update_needed(ssk) && ssk->state >= TCPS_ESTABLISHED &&
221 ssk->state < TCPS_FIN_WAIT_2) {
222 mb = sdp_alloc_mb_data(ssk->socket, wait);
225 sdp_post_send(ssk, mb);
236 if ((ssk->flags & SDP_NEEDFIN) && !sk->so_snd.sb_sndptr &&
237 tx_credits(ssk) > 1) {
241 ssk->flags &= ~SDP_NEEDFIN;
242 sdp_post_send(ssk, mb);
245 low = (sdp_tx_ring_slots_left(ssk) <= SDP_MIN_TX_CREDITS);
248 sdp_arm_tx_cq(ssk);
249 if (sdp_xmit_poll(ssk, low))
255 ssk->nagle_last_unacked = -1;
256 callout_reset(&ssk->nagle_timer, 1, sdp_nagle_timeout, ssk);