Skip to content

Commit df80643

Browse files
committed
rxrpc: Separate call retransmission from other conn events
jira LE-1907 Rebuild_History Non-Buildable kernel-rt-5.14.0-284.30.1.rt14.315.el9_2 commit-author David Howells <dhowells@redhat.com> commit 30df927 Empty-Commit: Cherry-Pick Conflicts during history rebuild. Will be included in final tarball splat. Ref for failed cherry-pick at: ciq/ciq_backports/kernel-rt-5.14.0-284.30.1.rt14.315.el9_2/30df927b.failed Call the rxrpc_conn_retransmit_call() directly from rxrpc_input_packet() rather than calling it via connection event handling. Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: linux-afs@lists.infradead.org (cherry picked from commit 30df927) Signed-off-by: Jonathan Maple <jmaple@ciq.com> # Conflicts: # net/rxrpc/conn_event.c # net/rxrpc/io_thread.c
1 parent b3fc03b commit df80643

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
rxrpc: Separate call retransmission from other conn events
2+
3+
jira LE-1907
4+
Rebuild_History Non-Buildable kernel-rt-5.14.0-284.30.1.rt14.315.el9_2
5+
commit-author David Howells <dhowells@redhat.com>
6+
commit 30df927b936b2ef21eb07dce9c141c7897609643
7+
Empty-Commit: Cherry-Pick Conflicts during history rebuild.
8+
Will be included in final tarball splat. Ref for failed cherry-pick at:
9+
ciq/ciq_backports/kernel-rt-5.14.0-284.30.1.rt14.315.el9_2/30df927b.failed
10+
11+
Call the rxrpc_conn_retransmit_call() directly from rxrpc_input_packet()
12+
rather than calling it via connection event handling.
13+
14+
Signed-off-by: David Howells <dhowells@redhat.com>
15+
cc: Marc Dionne <marc.dionne@auristor.com>
16+
cc: linux-afs@lists.infradead.org
17+
(cherry picked from commit 30df927b936b2ef21eb07dce9c141c7897609643)
18+
Signed-off-by: Jonathan Maple <jmaple@ciq.com>
19+
20+
# Conflicts:
21+
# net/rxrpc/conn_event.c
22+
# net/rxrpc/io_thread.c
23+
diff --cc net/rxrpc/conn_event.c
24+
index abf03a5b1d31,dfd29882126f..000000000000
25+
--- a/net/rxrpc/conn_event.c
26+
+++ b/net/rxrpc/conn_event.c
27+
@@@ -472,14 -454,64 +454,73 @@@ void rxrpc_process_connection(struct wo
28+
struct rxrpc_connection *conn =
29+
container_of(work, struct rxrpc_connection, processor);
30+
31+
- rxrpc_see_connection(conn, rxrpc_conn_see_work);
32+
+ rxrpc_see_connection(conn);
33+
34+
- if (__rxrpc_use_local(conn->local, rxrpc_local_use_conn_work)) {
35+
+ if (__rxrpc_use_local(conn->params.local)) {
36+
rxrpc_do_process_connection(conn);
37+
++<<<<<<< HEAD
38+
+ rxrpc_unuse_local(conn->params.local);
39+
+ }
40+
+
41+
+ rxrpc_put_connection(conn);
42+
+ _leave("");
43+
+ return;
44+
++=======
45+
+ rxrpc_unuse_local(conn->local, rxrpc_local_unuse_conn_work);
46+
+ }
47+
+ }
48+
+
49+
+ /*
50+
+ * post connection-level events to the connection
51+
+ * - this includes challenges, responses, some aborts and call terminal packet
52+
+ * retransmission.
53+
+ */
54+
+ static void rxrpc_post_packet_to_conn(struct rxrpc_connection *conn,
55+
+ struct sk_buff *skb)
56+
+ {
57+
+ _enter("%p,%p", conn, skb);
58+
+
59+
+ rxrpc_get_skb(skb, rxrpc_skb_get_conn_work);
60+
+ skb_queue_tail(&conn->rx_queue, skb);
61+
+ rxrpc_queue_conn(conn, rxrpc_conn_queue_rx_work);
62+
+ }
63+
+
64+
+ /*
65+
+ * Input a connection-level packet.
66+
+ */
67+
+ int rxrpc_input_conn_packet(struct rxrpc_connection *conn, struct sk_buff *skb)
68+
+ {
69+
+ struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
70+
+
71+
+ if (conn->state >= RXRPC_CONN_REMOTELY_ABORTED) {
72+
+ _leave(" = -ECONNABORTED [%u]", conn->state);
73+
+ return 0;
74+
+ }
75+
+
76+
+ _enter("{%d},{%u,%%%u},", conn->debug_id, sp->hdr.type, sp->hdr.serial);
77+
+
78+
+ switch (sp->hdr.type) {
79+
+ case RXRPC_PACKET_TYPE_BUSY:
80+
+ /* Just ignore BUSY packets for now. */
81+
+ return 0;
82+
+
83+
+ case RXRPC_PACKET_TYPE_ABORT:
84+
+ conn->error = -ECONNABORTED;
85+
+ conn->abort_code = skb->priority;
86+
+ conn->state = RXRPC_CONN_REMOTELY_ABORTED;
87+
+ set_bit(RXRPC_CONN_DONT_REUSE, &conn->flags);
88+
+ rxrpc_abort_calls(conn, RXRPC_CALL_REMOTELY_ABORTED, sp->hdr.serial);
89+
+ return 0;
90+
+
91+
+ case RXRPC_PACKET_TYPE_CHALLENGE:
92+
+ case RXRPC_PACKET_TYPE_RESPONSE:
93+
+ rxrpc_post_packet_to_conn(conn, skb);
94+
+ return 0;
95+
+
96+
+ default:
97+
+ trace_rxrpc_rx_eproto(NULL, sp->hdr.serial,
98+
+ tracepoint_string("bad_conn_pkt"));
99+
+ return -EPROTO;
100+
+ }
101+
++>>>>>>> 30df927b936b (rxrpc: Separate call retransmission from other conn events)
102+
}
103+
* Unmerged path net/rxrpc/io_thread.c
104+
diff --git a/net/rxrpc/ar-internal.h b/net/rxrpc/ar-internal.h
105+
index 46ce41afb431..66956022c308 100644
106+
--- a/net/rxrpc/ar-internal.h
107+
+++ b/net/rxrpc/ar-internal.h
108+
@@ -878,6 +878,8 @@ void rxrpc_clean_up_local_conns(struct rxrpc_local *);
109+
/*
110+
* conn_event.c
111+
*/
112+
+void rxrpc_conn_retransmit_call(struct rxrpc_connection *conn, struct sk_buff *skb,
113+
+ unsigned int channel);
114+
void rxrpc_process_connection(struct work_struct *);
115+
void rxrpc_process_delayed_final_acks(struct rxrpc_connection *, bool);
116+
117+
* Unmerged path net/rxrpc/conn_event.c
118+
* Unmerged path net/rxrpc/io_thread.c

0 commit comments

Comments
 (0)