diff options
author | David Howells <dhowells@redhat.com> | 2016-04-04 15:00:34 +0200 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2016-06-15 11:15:16 +0200 |
commit | f66d7490196055cb9fb058f8936d19111a6231b9 (patch) | |
tree | 915553b7124caf0a18c22db24e2ee1c60cafcc96 /net/rxrpc/output.c | |
parent | rxrpc: Do a little bit of tidying in the ICMP processing (diff) | |
download | linux-f66d7490196055cb9fb058f8936d19111a6231b9.tar.xz linux-f66d7490196055cb9fb058f8936d19111a6231b9.zip |
rxrpc: Use the peer record to distribute network errors
Use the peer record to distribute network errors rather than the transport
object (which I want to get rid of). An error from a particular peer
terminates all calls on that peer.
For future consideration:
(1) For ICMP-induced errors it might be worth trying to extract the RxRPC
header from the offending packet, if one is returned attached to the
ICMP packet, to better direct the error.
This may be overkill, though, since an ICMP packet would be expected
to be relating to the destination port, machine or network. RxRPC
ABORT and BUSY packets give notice at RxRPC level.
(2) To also abort connection-level communications (such as CHALLENGE
packets) where indicted by an error - but that requires some revamping
of the connection event handling first.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc/output.c')
-rw-r--r-- | net/rxrpc/output.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/net/rxrpc/output.c b/net/rxrpc/output.c index 2e3c4064e29c..e6fb3863b0bc 100644 --- a/net/rxrpc/output.c +++ b/net/rxrpc/output.c @@ -707,7 +707,9 @@ out: call_aborted: rxrpc_free_skb(skb); if (call->state == RXRPC_CALL_NETWORK_ERROR) - ret = call->conn->trans->peer->net_error; + ret = call->error_report < RXRPC_LOCAL_ERROR_OFFSET ? + call->error_report : + call->error_report - RXRPC_LOCAL_ERROR_OFFSET; else ret = -ECONNABORTED; _leave(" = %d", ret); |