Message ID | 20787.1686828722@warthog.procyon.org.uk (mailing list archive) |
---|---|
State | Accepted |
Commit | 9f8d0dc0ec4a4b5b78c0be83238c4511ff5f1ae0 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] kcm: Fix unnecessary psock unreservation. | expand |
Hello: This patch was applied to netdev/net-next.git (main) by Jakub Kicinski <kuba@kernel.org>: On Thu, 15 Jun 2023 12:32:02 +0100 you wrote: > kcm_write_msgs() calls unreserve_psock() to release its hold on the > underlying TCP socket if it has run out of things to transmit, but if we > have nothing in the write queue on entry (e.g. because someone did a > zero-length sendmsg), we don't actually go into the transmission loop and > as a consequence don't call reserve_psock(). > > Fix this by skipping the call to unreserve_psock() if we didn't reserve a > psock. > > [...] Here is the summary with links: - [net-next] kcm: Fix unnecessary psock unreservation. https://git.kernel.org/netdev/net-next/c/9f8d0dc0ec4a You are awesome, thank you!
diff --git a/net/kcm/kcmsock.c b/net/kcm/kcmsock.c index d75d775e9462..d0537c1c8cd7 100644 --- a/net/kcm/kcmsock.c +++ b/net/kcm/kcmsock.c @@ -661,6 +661,7 @@ static int kcm_write_msgs(struct kcm_sock *kcm) kcm_abort_tx_psock(psock, ret ? -ret : EPIPE, true); unreserve_psock(kcm); + psock = NULL; txm->started_tx = false; kcm_report_tx_retry(kcm); @@ -696,7 +697,8 @@ static int kcm_write_msgs(struct kcm_sock *kcm) if (!head) { /* Done with all queued messages. */ WARN_ON(!skb_queue_empty(&sk->sk_write_queue)); - unreserve_psock(kcm); + if (psock) + unreserve_psock(kcm); } /* Check if write space is available */