Fix for error handling
authorJean Wolter <jean@sec.t-labs.tu-berlin.de>
Wed, 2 May 2012 14:43:25 +0000 (16:43 +0200)
committerWouter Verhelst <w@uter.be>
Wed, 2 May 2012 14:44:50 +0000 (16:44 +0200)
When a client disconnects from the nbd device (triggered via nbd-client
-d <nbd device>) the ioctl(nbd, NBD_DO_IT) returns with an error.
nbd-client checks errno to figure out whether it was disconnected and
whether it should terminate or not. Unfortunatly it invokes fprintf()
before checking errno and fprintf overwrites the current value of errno.
The attached patch saves the current value of errno and checks the saved
value.

nbd-client.c

index 7a8896e3b40bd606701f7eb2a2e44ebb76d386cc..6b25086d30e8ab5b16fee1e4a23ab9a7083843ca 100644 (file)
@@ -474,8 +474,9 @@ int main(int argc, char *argv[]) {
 #endif
 
                if (ioctl(nbd, NBD_DO_IT) < 0) {
-                       fprintf(stderr, "Kernel call returned: %m");
-                       if(errno==EBADR) {
+                       int error = errno;
+                       fprintf(stderr, "nbd,%d: Kernel call returned: %d", getpid(), error);
+                       if(error==EBADR) {
                                /* The user probably did 'nbd-client -d' on us.
                                 * quit */
                                cont=0;