diff options
| author | Vinicius Ferrao <ferrao@versatushpc.com.br> | 2026-10-04 21:07:30 +0000 |
|---|---|---|
| committer | Rick Macklem <rmacklem@FreeBSD.org> | 2026-10-04 21:07:30 +0000 |
| commit | 49bec8c3dc58cf8e944f9bbbbea07e7e856ad897 (patch) | |
| tree | 2b96d2596ea10c061c9b5ba6f8ad0d395b1d7b17 /lib/libsys/riscv/(public-mirror) | |
| parent | 81a6514689cefdaa5c92b5539ae885ec8c6b3336 (diff) | |
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
