I still need to do a proper job getting logs together, but maybe someone can tell me I'm being dumb before I put too much time into this.
Currently, filesystems I have mounted from nbd devices panic on I/O failure if I restart the corresponding server. I would like nbd to renegotiate the connection if the server drops, and -persist seems to do the right thing . However, if I set up a test environment on the local machine and restart the server after connecting:
$ nbd-client -N default localhost /dev/nbd0 -persist -nonetlink -nofork
Negotiation: ..size = 1024MB
bs=1024, sz=1073741824 bytes
timeout=5
<restart nbd-server here>
Kernel call returned.
sock, done
The call simply returns, and does not attempt to reconnect. From the log message, it does not take the branch at
|
if (ioctl(nbd, NBD_DO_IT) < 0) { |
, instead seeming to take the branch at
. I have no idea why the
ioctl call would return >= 0, but it seems to.
I realize that the filesystem may also need some love to get the desired behavior, but that's moot if nbd does not renegotiate.
I still need to do a proper job getting logs together, but maybe someone can tell me I'm being dumb before I put too much time into this.
Currently, filesystems I have mounted from nbd devices panic on I/O failure if I restart the corresponding server. I would like nbd to renegotiate the connection if the server drops, and
-persistseems to do the right thing . However, if I set up a test environment on the local machine and restart the server after connecting:The call simply returns, and does not attempt to reconnect. From the log message, it does not take the branch at
nbd/nbd-client.c
Line 1292 in 128fd55
nbd/nbd-client.c
Line 1329 in 128fd55
ioctlcall would return >= 0, but it seems to.I realize that the filesystem may also need some love to get the desired behavior, but that's moot if nbd does not renegotiate.