306 |
306 |
int main(int argc, char **argv)
|
307 |
307 |
{
|
308 |
308 |
BlockDriverState *bs;
|
|
309 |
BlockDriver *drv;
|
309 |
310 |
off_t dev_offset = 0;
|
310 |
311 |
uint32_t nbdflags = 0;
|
311 |
312 |
bool disconnect = false;
|
... | ... | |
313 |
314 |
char *device = NULL;
|
314 |
315 |
int port = NBD_DEFAULT_PORT;
|
315 |
316 |
off_t fd_size;
|
316 |
|
const char *sopt = "hVb:o:p:rsnP:c:dvk:e:t";
|
|
317 |
const char *sopt = "hVb:o:p:rsnP:c:dvk:e:f:t";
|
317 |
318 |
struct option lopt[] = {
|
318 |
319 |
{ "help", 0, NULL, 'h' },
|
319 |
320 |
{ "version", 0, NULL, 'V' },
|
... | ... | |
333 |
334 |
#endif
|
334 |
335 |
{ "discard", 1, NULL, QEMU_NBD_OPT_DISCARD },
|
335 |
336 |
{ "shared", 1, NULL, 'e' },
|
|
337 |
{ "format", 1, NULL, 'f' },
|
336 |
338 |
{ "persistent", 0, NULL, 't' },
|
337 |
339 |
{ "verbose", 0, NULL, 'v' },
|
338 |
340 |
{ NULL, 0, NULL, 0 }
|
... | ... | |
351 |
353 |
bool seen_aio = false;
|
352 |
354 |
#endif
|
353 |
355 |
pthread_t client_thread;
|
|
356 |
const char *fmt = NULL;
|
354 |
357 |
|
355 |
358 |
/* The client thread uses SIGTERM to interrupt the server. A signal
|
356 |
359 |
* handler ensures that "qemu-nbd -v -c" exits with a nice status code.
|
... | ... | |
454 |
457 |
errx(EXIT_FAILURE, "Shared device number must be greater than 0\n");
|
455 |
458 |
}
|
456 |
459 |
break;
|
|
460 |
case 'f':
|
|
461 |
fmt = optarg;
|
|
462 |
break;
|
457 |
463 |
case 't':
|
458 |
464 |
persistent = 1;
|
459 |
465 |
break;
|
... | ... | |
555 |
561 |
bdrv_init();
|
556 |
562 |
atexit(bdrv_close_all);
|
557 |
563 |
|
|
564 |
if (fmt) {
|
|
565 |
drv = bdrv_find_format(fmt);
|
|
566 |
if (!drv) {
|
|
567 |
errx(EXIT_FAILURE, "Unknown file format '%s'", fmt);
|
|
568 |
}
|
|
569 |
} else {
|
|
570 |
drv = NULL;
|
|
571 |
}
|
|
572 |
|
558 |
573 |
bs = bdrv_new("hda");
|
559 |
574 |
srcpath = argv[optind];
|
560 |
|
if ((ret = bdrv_open(bs, srcpath, NULL, flags, NULL)) < 0) {
|
|
575 |
ret = bdrv_open(bs, srcpath, NULL, flags, drv);
|
|
576 |
if (ret < 0) {
|
561 |
577 |
errno = -ret;
|
562 |
578 |
err(EXIT_FAILURE, "Failed to bdrv_open '%s'", argv[optind]);
|
563 |
579 |
}
|