aboutsummaryrefslogtreecommitdiff
path: root/lib/libsys/riscv/(public-mirror)
diff options
context:
space:
mode:
authorVinicius Ferrao <ferrao@versatushpc.com.br>2026-10-04 21:07:30 +0000
committerRick Macklem <rmacklem@FreeBSD.org>2026-10-04 21:07:30 +0000
commit49bec8c3dc58cf8e944f9bbbbea07e7e856ad897 (patch)
tree2b96d2596ea10c061c9b5ba6f8ad0d395b1d7b17 /lib/libsys/riscv/(public-mirror)
parent81a6514689cefdaa5c92b5539ae885ec8c6b3336 (diff)
clnt_vc.c: Fix handling of broken TCP connectionsHEADmain
After more than, I don't know, maybe 10k operations: mount, copy, remove, verify and unmount cycles, one cp command hung in close() / ncl_flush and never recovered. The machine and the mount continued to work normally through a new connection, but the writes using the old connection stayed frozen. I did not understand exactly what happened. I traced what appears to be the issue in the code. My current understanding is that clnt_vc_soupcall() saw the EOF and woke the caller waiting for RPC replies, but one caller remained blocked in sosend(). That thread continued holding a reference to the old client, preventing it from being completely cleaned up. The attached patch calls socantsendmore() when EOF is received, which should wake the blocked sender and let the normal reconnect code replace the connection. Reviewed by: rmacklem MFC after: 1 week Sponsored by: VersatusHPC
Diffstat (limited to 'lib/libsys/riscv/(public-mirror)')
0 files changed, 0 insertions, 0 deletions