|
@@ -223,6 +223,15 @@ static void rxrpc_queue_packet(struct rxrpc_sock *rx, struct rxrpc_call *call,
|
|
|
|
|
|
ret = rxrpc_send_data_packet(call, skb, false);
|
|
|
if (ret < 0) {
|
|
|
+ switch (ret) {
|
|
|
+ case -ENETUNREACH:
|
|
|
+ case -EHOSTUNREACH:
|
|
|
+ case -ECONNREFUSED:
|
|
|
+ rxrpc_set_call_completion(call,
|
|
|
+ RXRPC_CALL_LOCAL_ERROR,
|
|
|
+ 0, ret);
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
_debug("need instant resend %d", ret);
|
|
|
rxrpc_instant_resend(call, ix);
|
|
|
} else {
|
|
@@ -241,6 +250,7 @@ static void rxrpc_queue_packet(struct rxrpc_sock *rx, struct rxrpc_call *call,
|
|
|
rxrpc_timer_set_for_send);
|
|
|
}
|
|
|
|
|
|
+out:
|
|
|
rxrpc_free_skb(skb, rxrpc_skb_tx_freed);
|
|
|
_leave("");
|
|
|
}
|