summaryrefslogtreecommitdiffstats
path: root/net/rxrpc/ar-internal.h
diff options
context:
space:
mode:
authorDavid Howells2016-08-23 16:27:25 +0200
committerDavid Howells2016-08-23 17:02:35 +0200
commit18bfeba50dfd0c8ee420396f2570f16a0bdbd7de (patch)
tree3b3a896ce8212cc31070c890a2a9f24fe572f4dd /net/rxrpc/ar-internal.h
parentrxrpc: Calculate serial skew on packet reception (diff)
downloadkernel-qcow2-linux-18bfeba50dfd0c8ee420396f2570f16a0bdbd7de.tar.gz
kernel-qcow2-linux-18bfeba50dfd0c8ee420396f2570f16a0bdbd7de.tar.xz
kernel-qcow2-linux-18bfeba50dfd0c8ee420396f2570f16a0bdbd7de.zip
rxrpc: Perform terminal call ACK/ABORT retransmission from conn processor
Perform terminal call ACK/ABORT retransmission in the connection processor rather than in the call processor. With this change, once last_call is set, no more incoming packets will be routed to the corresponding call or any earlier calls on that channel (call IDs must only increase on a channel on a connection). Further, if a packet's callNumber is before the last_call ID or a packet is aimed at successfully completed service call then that packet is discarded and ignored. Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'net/rxrpc/ar-internal.h')
-rw-r--r--net/rxrpc/ar-internal.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
index c779b50135f6..7296039c537a 100644
--- a/net/rxrpc/ar-internal.h
+++ b/net/rxrpc/ar-internal.h
@@ -295,7 +295,12 @@ struct rxrpc_connection {
u32 call_id; /* ID of current call */
u32 call_counter; /* Call ID counter */
u32 last_call; /* ID of last call */
- u32 last_result; /* Result of last call (0/abort) */
+ u8 last_type; /* Type of last packet */
+ u16 last_service_id;
+ union {
+ u32 last_seq;
+ u32 last_abort;
+ };
} channels[RXRPC_MAXCALLS];
wait_queue_head_t channel_wq; /* queue to wait for channel to become available */