<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/net/rxrpc/input.c, branch linux-4.9.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.9.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-4.9.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2020-02-14T21:30:58Z</updated>
<entry>
<title>rxrpc: Fix insufficient receive notification generation</title>
<updated>2020-02-14T21:30:58Z</updated>
<author>
<name>David Howells</name>
</author>
<published>2020-01-30T21:50:36Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=362f28fc8d268cb92e83c3fc5b699e3878de51a7'/>
<id>urn:sha1:362f28fc8d268cb92e83c3fc5b699e3878de51a7</id>
<content type='text'>
[ Upstream commit f71dbf2fb28489a79bde0dca1c8adfb9cdb20a6b ]

In rxrpc_input_data(), rxrpc_notify_socket() is called if the base sequence
number of the packet is immediately following the hard-ack point at the end
of the function.  However, this isn't sufficient, since the recvmsg side
may have been advancing the window and then overrun the position in which
we're adding - at which point rx_hard_ack &gt;= seq0 and no notification is
generated.

Fix this by always generating a notification at the end of the input
function.

Without this, a long call may stall, possibly indefinitely.

Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code")
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>rxrpc: Only take the rwind and mtu values from latest ACK</title>
<updated>2018-11-10T15:42:56Z</updated>
<author>
<name>David Howells</name>
</author>
<published>2018-10-08T14:46:11Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=2daa0b5ec29630377c6d14b3d943e1c5c2a65577'/>
<id>urn:sha1:2daa0b5ec29630377c6d14b3d943e1c5c2a65577</id>
<content type='text'>
[ Upstream commit 298bc15b2079c324e82d0a6fda39c3d762af7282 ]

Move the out-of-order and duplicate ACK packet check to before the call to
rxrpc_input_ackinfo() so that the receive window size and MTU size are only
checked in the latest ACK packet and don't regress.

Fixes: 248f219cb8bc ("rxrpc: Rewrite the data and ack handling code")
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>rxrpc: Don't check RXRPC_CALL_TX_LAST after calling rxrpc_rotate_tx_window()</title>
<updated>2018-11-10T15:42:56Z</updated>
<author>
<name>David Howells</name>
</author>
<published>2018-10-08T14:46:01Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=d9ec661f2dc887eb13a81a1d61538c5d3ed27a66'/>
<id>urn:sha1:d9ec661f2dc887eb13a81a1d61538c5d3ed27a66</id>
<content type='text'>
[ Upstream commit c479d5f2c2e1ce609da08c075054440d97ddff52 ]

We should only call the function to end a call's Tx phase if we rotated the
marked-last packet out of the transmission buffer.

Make rxrpc_rotate_tx_window() return an indication of whether it just
rotated the packet marked as the last out of the transmit buffer, carrying
the information out of the locked section in that function.

We can then check the return value instead of examining RXRPC_CALL_TX_LAST.

Fixes: 70790dbe3f66 ("rxrpc: Pass the last Tx packet marker in the annotation buffer")
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>rxrpc: Don't treat call aborts as conn aborts</title>
<updated>2018-05-30T05:50:42Z</updated>
<author>
<name>David Howells</name>
</author>
<published>2018-03-30T20:04:44Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=34f0516b709826c9210ad7e662a47fbef32ce3a1'/>
<id>urn:sha1:34f0516b709826c9210ad7e662a47fbef32ce3a1</id>
<content type='text'>
[ Upstream commit 57b0c9d49b94bbeb53649b7fbd264603c1ebd585 ]

If a call-level abort is received for the previous call to complete on a
connection channel, then that abort is queued for the connection processor
to handle.  Unfortunately, the connection processor then assumes without
checking that the abort is connection-level (ie. callNumber is 0) and
distributes it over all active calls on that connection, thereby
incorrectly aborting them.

Fix this by discarding aborts aimed at a completed call.

Further, discard all packets aimed at a call that's complete if there's
currently an active call on a channel, since the DATA packets associated
with the new call automatically terminate the old call.

Fixes: 18bfeba50dfd ("rxrpc: Perform terminal call ACK/ABORT retransmission from conn processor")
Reported-by: Marc Dionne &lt;marc.dionne@auristor.com&gt;
Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: Sasha Levin &lt;alexander.levin@microsoft.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>rxrpc: Wake up the transmitter if Rx window size increases on the peer</title>
<updated>2017-12-20T09:07:19Z</updated>
<author>
<name>David Howells</name>
</author>
<published>2017-03-10T07:48:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=515d78dc0a89a14c10ce3b3f007c99508aa65e61'/>
<id>urn:sha1:515d78dc0a89a14c10ce3b3f007c99508aa65e61</id>
<content type='text'>
[ Upstream commit 702f2ac87a9a8da23bf8506466bc70175fc970b2 ]

The RxRPC ACK packet may contain an extension that includes the peer's
current Rx window size for this call.  We adjust the local Tx window size
to match.  However, the transmitter can stall if the receive window is
reduced to 0 by the peer and then reopened.

This is because the normal way that the transmitter is re-energised is by
dropping something out of our Tx queue and thus making space.  When a
single gap is made, the transmitter is woken up.  However, because there's
nothing in the Tx queue at this point, this doesn't happen.

To fix this, perform a wake_up() any time we see the peer's Rx window size
increasing.

The observable symptom is that calls start failing on ETIMEDOUT and the
following:

	kAFS: SERVER DEAD state=-62

appears in dmesg.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
Signed-off-by: Sasha Levin &lt;alexander.levin@verizon.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>rxrpc: Partially handle OpenAFS's improper termination of calls</title>
<updated>2016-10-06T07:11:49Z</updated>
<author>
<name>David Howells</name>
</author>
<published>2016-10-06T07:11:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b3156274ca01297b861e912175820e78c9ac4d7c'/>
<id>urn:sha1:b3156274ca01297b861e912175820e78c9ac4d7c</id>
<content type='text'>
OpenAFS doesn't always correctly terminate client calls that it makes -
this includes calls the OpenAFS servers make to the cache manager service.
It should end the client call with either:

 (1) An ACK that has firstPacket set to one greater than the seq number of
     the reply DATA packet with the LAST_PACKET flag set (thereby
     hard-ACK'ing all packets).  nAcks should be 0 and acks[] should be
     empty (ie. no soft-ACKs).

 (2) An ACKALL packet.

OpenAFS, though, may send an ACK packet with firstPacket set to the last
seq number or less and soft-ACKs listed for all packets up to and including
the last DATA packet.

The transmitter, however, is obliged to keep the call live and the
soft-ACK'd DATA packets around until they're hard-ACK'd as the receiver is
permitted to drop any merely soft-ACK'd packet and request retransmission
by sending an ACK packet with a NACK in it.

Further, OpenAFS will also terminate a client call by beginning the next
client call on the same connection channel.  This implicitly completes the
previous call.

This patch handles implicit ACK of a call on a channel by the reception of
the first packet of the next call on that channel.

If another call doesn't come along to implicitly ACK a call, then we have
to time the call out.  There are some bugs there that will be addressed in
subsequent patches.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</content>
</entry>
<entry>
<title>rxrpc: Fix loss of PING RESPONSE ACK production due to PING ACKs</title>
<updated>2016-10-06T07:11:49Z</updated>
<author>
<name>David Howells</name>
</author>
<published>2016-10-06T07:11:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a5af7e1fc69a46f29b977fd4b570e0ac414c2338'/>
<id>urn:sha1:a5af7e1fc69a46f29b977fd4b570e0ac414c2338</id>
<content type='text'>
Separate the output of PING ACKs from the output of other sorts of ACK so
that if we receive a PING ACK and schedule transmission of a PING RESPONSE
ACK, the response doesn't get cancelled by a PING ACK we happen to be
scheduling transmission of at the same time.

If a PING RESPONSE gets lost, the other side might just sit there waiting
for it and refuse to proceed otherwise.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</content>
</entry>
<entry>
<title>rxrpc: Only ping for lost reply in client call</title>
<updated>2016-10-06T07:11:49Z</updated>
<author>
<name>David Howells</name>
</author>
<published>2016-10-06T07:11:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=a9f312d98affab387557e2795d4e11ad82a4e4e8'/>
<id>urn:sha1:a9f312d98affab387557e2795d4e11ad82a4e4e8</id>
<content type='text'>
When a reply is deemed lost, we send a ping to find out the other end
received all the request data packets we sent.  This should be limited to
client calls and we shouldn't do this on service calls.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</content>
</entry>
<entry>
<title>rxrpc: Keep the call timeouts as ktimes rather than jiffies</title>
<updated>2016-09-30T13:40:11Z</updated>
<author>
<name>David Howells</name>
</author>
<published>2016-09-26T21:12:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=df0adc788ae74e35ab1a79f3db878df7fdc7db55'/>
<id>urn:sha1:df0adc788ae74e35ab1a79f3db878df7fdc7db55</id>
<content type='text'>
Keep that call timeouts as ktimes rather than jiffies so that they can be
expressed as functions of RTT.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</content>
</entry>
<entry>
<title>rxrpc: The offset field in struct rxrpc_skb_priv is unnecessary</title>
<updated>2016-09-30T13:39:28Z</updated>
<author>
<name>David Howells</name>
</author>
<published>2016-09-30T12:26:03Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=775e5b71db6aca47d49d43d08751f2e8ebad7f60'/>
<id>urn:sha1:775e5b71db6aca47d49d43d08751f2e8ebad7f60</id>
<content type='text'>
The offset field in struct rxrpc_skb_priv is unnecessary as the value can
always be calculated.

Signed-off-by: David Howells &lt;dhowells@redhat.com&gt;
</content>
</entry>
</feed>
