aboutsummaryrefslogtreecommitdiffstats
path: root/net/rxrpc/sendmsg.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/rxrpc/sendmsg.c')
-rw-r--r--net/rxrpc/sendmsg.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c
index 5d3f33ce6d41..6a1547b270fe 100644
--- a/net/rxrpc/sendmsg.c
+++ b/net/rxrpc/sendmsg.c
@@ -176,7 +176,7 @@ static int rxrpc_queue_packet(struct rxrpc_sock *rx, struct rxrpc_call *call,
176 skb->tstamp = ktime_get_real(); 176 skb->tstamp = ktime_get_real();
177 177
178 ix = seq & RXRPC_RXTX_BUFF_MASK; 178 ix = seq & RXRPC_RXTX_BUFF_MASK;
179 rxrpc_get_skb(skb, rxrpc_skb_tx_got); 179 rxrpc_get_skb(skb, rxrpc_skb_got);
180 call->rxtx_annotations[ix] = annotation; 180 call->rxtx_annotations[ix] = annotation;
181 smp_wmb(); 181 smp_wmb();
182 call->rxtx_buffer[ix] = skb; 182 call->rxtx_buffer[ix] = skb;
@@ -226,6 +226,7 @@ static int rxrpc_queue_packet(struct rxrpc_sock *rx, struct rxrpc_call *call,
226 rxrpc_set_call_completion(call, 226 rxrpc_set_call_completion(call,
227 RXRPC_CALL_LOCAL_ERROR, 227 RXRPC_CALL_LOCAL_ERROR,
228 0, ret); 228 0, ret);
229 rxrpc_notify_socket(call);
229 goto out; 230 goto out;
230 } 231 }
231 _debug("need instant resend %d", ret); 232 _debug("need instant resend %d", ret);
@@ -247,7 +248,7 @@ static int rxrpc_queue_packet(struct rxrpc_sock *rx, struct rxrpc_call *call,
247 } 248 }
248 249
249out: 250out:
250 rxrpc_free_skb(skb, rxrpc_skb_tx_freed); 251 rxrpc_free_skb(skb, rxrpc_skb_freed);
251 _leave(" = %d", ret); 252 _leave(" = %d", ret);
252 return ret; 253 return ret;
253} 254}
@@ -288,7 +289,7 @@ static int rxrpc_send_data(struct rxrpc_sock *rx,
288 289
289 skb = call->tx_pending; 290 skb = call->tx_pending;
290 call->tx_pending = NULL; 291 call->tx_pending = NULL;
291 rxrpc_see_skb(skb, rxrpc_skb_tx_seen); 292 rxrpc_see_skb(skb, rxrpc_skb_seen);
292 293
293 copied = 0; 294 copied = 0;
294 do { 295 do {
@@ -335,7 +336,9 @@ static int rxrpc_send_data(struct rxrpc_sock *rx,
335 if (!skb) 336 if (!skb)
336 goto maybe_error; 337 goto maybe_error;
337 338
338 rxrpc_new_skb(skb, rxrpc_skb_tx_new); 339 sp = rxrpc_skb(skb);
340 sp->rx_flags |= RXRPC_SKB_TX_BUFFER;
341 rxrpc_new_skb(skb, rxrpc_skb_new);
339 342
340 _debug("ALLOC SEND %p", skb); 343 _debug("ALLOC SEND %p", skb);
341 344
@@ -345,7 +348,6 @@ static int rxrpc_send_data(struct rxrpc_sock *rx,
345 skb_reserve(skb, call->conn->security_size); 348 skb_reserve(skb, call->conn->security_size);
346 skb->len += call->conn->security_size; 349 skb->len += call->conn->security_size;
347 350
348 sp = rxrpc_skb(skb);
349 sp->remain = chunk; 351 sp->remain = chunk;
350 if (sp->remain > skb_tailroom(skb)) 352 if (sp->remain > skb_tailroom(skb))
351 sp->remain = skb_tailroom(skb); 353 sp->remain = skb_tailroom(skb);
@@ -438,7 +440,7 @@ out:
438 return ret; 440 return ret;
439 441
440call_terminated: 442call_terminated:
441 rxrpc_free_skb(skb, rxrpc_skb_tx_freed); 443 rxrpc_free_skb(skb, rxrpc_skb_freed);
442 _leave(" = %d", call->error); 444 _leave(" = %d", call->error);
443 return call->error; 445 return call->error;
444 446