提交 4dd533aa 编写于 作者: A Anthony Liguori

Merge remote-tracking branch 'bonzini/nbd-next' into staging

* bonzini/nbd-next:
  qemu-nbd: add --cache and --aio options
  qemu-nbd: reorganize help message
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
#include <pthread.h> #include <pthread.h>
#define SOCKET_PATH "/var/lock/qemu-nbd-%s" #define SOCKET_PATH "/var/lock/qemu-nbd-%s"
#define QEMU_NBD_OPT_CACHE 1
#define QEMU_NBD_OPT_AIO 2
static NBDExport *exp; static NBDExport *exp;
static int verbose; static int verbose;
...@@ -46,28 +48,43 @@ static int nb_fds; ...@@ -46,28 +48,43 @@ static int nb_fds;
static void usage(const char *name) static void usage(const char *name)
{ {
printf( (printf) (
"Usage: %s [OPTIONS] FILE\n" "Usage: %s [OPTIONS] FILE\n"
"QEMU Disk Network Block Device Server\n" "QEMU Disk Network Block Device Server\n"
"\n" "\n"
" -h, --help display this help and exit\n"
" -V, --version output version information and exit\n"
"\n"
"Connection properties:\n"
" -p, --port=PORT port to listen on (default `%d')\n" " -p, --port=PORT port to listen on (default `%d')\n"
" -o, --offset=OFFSET offset into the image\n"
" -b, --bind=IFACE interface to bind to (default `0.0.0.0')\n" " -b, --bind=IFACE interface to bind to (default `0.0.0.0')\n"
" -k, --socket=PATH path to the unix socket\n" " -k, --socket=PATH path to the unix socket\n"
" (default '"SOCKET_PATH"')\n" " (default '"SOCKET_PATH"')\n"
" -r, --read-only export read-only\n"
" -P, --partition=NUM only expose partition NUM\n"
" -s, --snapshot use snapshot file\n"
" -n, --nocache disable host cache\n"
" -c, --connect=DEV connect FILE to the local NBD device DEV\n"
" -d, --disconnect disconnect the specified device\n"
" -e, --shared=NUM device can be shared by NUM clients (default '1')\n" " -e, --shared=NUM device can be shared by NUM clients (default '1')\n"
" -t, --persistent don't exit on the last connection\n" " -t, --persistent don't exit on the last connection\n"
" -v, --verbose display extra debugging information\n" " -v, --verbose display extra debugging information\n"
" -h, --help display this help and exit\n"
" -V, --version output version information and exit\n"
"\n" "\n"
"Report bugs to <anthony@codemonkey.ws>\n" "Exposing part of the image:\n"
" -o, --offset=OFFSET offset into the image\n"
" -P, --partition=NUM only expose partition NUM\n"
"\n"
#ifdef __linux__
"Kernel NBD client support:\n"
" -c, --connect=DEV connect FILE to the local NBD device DEV\n"
" -d, --disconnect disconnect the specified device\n"
"\n"
#endif
"\n"
"Block device options:\n"
" -r, --read-only export read-only\n"
" -s, --snapshot use snapshot file\n"
" -n, --nocache disable host cache\n"
" --cache=MODE set cache mode (none, writeback, ...)\n"
#ifdef CONFIG_LINUX_AIO
" --aio=MODE set AIO mode (native or threads)\n"
#endif
"\n"
"Report bugs to <qemu-devel@nongnu.org>\n"
, name, NBD_DEFAULT_PORT, "DEVICE"); , name, NBD_DEFAULT_PORT, "DEVICE");
} }
...@@ -295,6 +312,10 @@ int main(int argc, char **argv) ...@@ -295,6 +312,10 @@ int main(int argc, char **argv)
{ "disconnect", 0, NULL, 'd' }, { "disconnect", 0, NULL, 'd' },
{ "snapshot", 0, NULL, 's' }, { "snapshot", 0, NULL, 's' },
{ "nocache", 0, NULL, 'n' }, { "nocache", 0, NULL, 'n' },
{ "cache", 1, NULL, QEMU_NBD_OPT_CACHE },
#ifdef CONFIG_LINUX_AIO
{ "aio", 1, NULL, QEMU_NBD_OPT_AIO },
#endif
{ "shared", 1, NULL, 'e' }, { "shared", 1, NULL, 'e' },
{ "persistent", 0, NULL, 't' }, { "persistent", 0, NULL, 't' },
{ "verbose", 0, NULL, 'v' }, { "verbose", 0, NULL, 'v' },
...@@ -309,6 +330,10 @@ int main(int argc, char **argv) ...@@ -309,6 +330,10 @@ int main(int argc, char **argv)
int ret; int ret;
int fd; int fd;
int persistent = 0; int persistent = 0;
bool seen_cache = false;
#ifdef CONFIG_LINUX_AIO
bool seen_aio = false;
#endif
pthread_t client_thread; pthread_t client_thread;
/* The client thread uses SIGTERM to interrupt the server. A signal /* The client thread uses SIGTERM to interrupt the server. A signal
...@@ -325,8 +350,32 @@ int main(int argc, char **argv) ...@@ -325,8 +350,32 @@ int main(int argc, char **argv)
flags |= BDRV_O_SNAPSHOT; flags |= BDRV_O_SNAPSHOT;
break; break;
case 'n': case 'n':
flags |= BDRV_O_NOCACHE | BDRV_O_CACHE_WB; optarg = (char *) "none";
/* fallthrough */
case QEMU_NBD_OPT_CACHE:
if (seen_cache) {
errx(EXIT_FAILURE, "-n and --cache can only be specified once");
}
seen_cache = true;
if (bdrv_parse_cache_flags(optarg, &flags) == -1) {
errx(EXIT_FAILURE, "Invalid cache mode `%s'", optarg);
}
break;
#ifdef CONFIG_LINUX_AIO
case QEMU_NBD_OPT_AIO:
if (seen_aio) {
errx(EXIT_FAILURE, "--aio can only be specified once");
}
seen_aio = true;
if (!strcmp(optarg, "native")) {
flags |= BDRV_O_NATIVE_AIO;
} else if (!strcmp(optarg, "threads")) {
/* this is the default */
} else {
errx(EXIT_FAILURE, "invalid aio mode `%s'", optarg);
}
break; break;
#endif
case 'b': case 'b':
bindto = optarg; bindto = optarg;
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册