qemu-nbd: add --discard option

Similar to --cache and --aio, this option mimics the discard suboption
of "-drive".

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
Paolo Bonzini 2013-02-08 14:06:13 +01:00 committed by Kevin Wolf
parent a9384aff53
commit ded9d2d5e2
2 changed files with 19 additions and 3 deletions

View File

@ -33,9 +33,10 @@
#include <libgen.h> #include <libgen.h>
#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_CACHE 1
#define QEMU_NBD_OPT_AIO 2 #define QEMU_NBD_OPT_AIO 2
#define QEMU_NBD_OPT_DISCARD 3
static NBDExport *exp; static NBDExport *exp;
static int verbose; static int verbose;
@ -330,6 +331,7 @@ int main(int argc, char **argv)
#ifdef CONFIG_LINUX_AIO #ifdef CONFIG_LINUX_AIO
{ "aio", 1, NULL, QEMU_NBD_OPT_AIO }, { "aio", 1, NULL, QEMU_NBD_OPT_AIO },
#endif #endif
{ "discard", 1, NULL, QEMU_NBD_OPT_DISCARD },
{ "shared", 1, NULL, 'e' }, { "shared", 1, NULL, 'e' },
{ "persistent", 0, NULL, 't' }, { "persistent", 0, NULL, 't' },
{ "verbose", 0, NULL, 'v' }, { "verbose", 0, NULL, 'v' },
@ -344,6 +346,7 @@ int main(int argc, char **argv)
int ret; int ret;
int fd; int fd;
bool seen_cache = false; bool seen_cache = false;
bool seen_discard = false;
#ifdef CONFIG_LINUX_AIO #ifdef CONFIG_LINUX_AIO
bool seen_aio = false; bool seen_aio = false;
#endif #endif
@ -389,6 +392,15 @@ int main(int argc, char **argv)
} }
break; break;
#endif #endif
case QEMU_NBD_OPT_DISCARD:
if (seen_discard) {
errx(EXIT_FAILURE, "--discard can only be specified once");
}
seen_discard = true;
if (bdrv_parse_discard_flags(optarg, &flags) == -1) {
errx(EXIT_FAILURE, "Invalid discard mode `%s'", optarg);
}
break;
case 'b': case 'b':
bindto = optarg; bindto = optarg;
break; break;

View File

@ -35,6 +35,10 @@ Export QEMU disk image using NBD protocol.
@item --aio=@var{aio} @item --aio=@var{aio}
choose asynchronous I/O mode between @samp{threads} (the default) choose asynchronous I/O mode between @samp{threads} (the default)
and @samp{native} (Linux only). and @samp{native} (Linux only).
@item --discard=@var{discard}
toggles whether @dfn{discard} (also known as @dfn{trim} or @dfn{unmap})
requests are ignored or passed to the filesystem. The default is no
(@samp{--discard=ignore}).
@item -c, --connect=@var{dev} @item -c, --connect=@var{dev}
connect @var{filename} to NBD device @var{dev} connect @var{filename} to NBD device @var{dev}
@item -d, --disconnect @item -d, --disconnect