From 60ba25afc01e5d4edd932ec4df6a42c7966cf366 Mon Sep 17 00:00:00 2001 From: yoe Date: Wed, 2 Apr 2008 13:15:57 +0000 Subject: [PATCH] r332: open() the device upon connecting after a fork(), so that the partition table will be read --- nbd-client.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/nbd-client.c b/nbd-client.c index 4e4777b..4df2281 100644 --- a/nbd-client.c +++ b/nbd-client.c @@ -38,7 +38,7 @@ #define MY_NAME "nbd_client" #include "cliserv.h" -int check_conn(char* devname) { +int check_conn(char* devname, int do_print) { char buf[256]; int fd; int len; @@ -55,7 +55,7 @@ int check_conn(char* devname) { } len=read(fd, buf, 256); buf[len-1]='\0'; - printf("%s\n", buf); + if(do_print) printf("%s\n", buf); return 0; } @@ -245,7 +245,7 @@ int main(int argc, char *argv[]) { return 0; } if(strcmp(argv[0], "-c")==0) { - return check_conn(argv[1]); + return check_conn(argv[1], 1); } if (strncmp(argv[0], "bs=", 3)==0) { @@ -304,12 +304,17 @@ int main(int argc, char *argv[]) { /* Go daemon */ chdir("/"); + do { #ifndef NOFORK - if (fork()) - exit(0); + if (fork()) { + while(check_conn(nbddev, 0)) { + sleep(1); + } + open(nbddev, O_RDONLY); + exit(0); + } #endif - do { if (ioctl(nbd, NBD_DO_IT) < 0) { fprintf(stderr, "Kernel call returned: %m"); if(errno==EBADR) { -- 1.7.10.4