[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 15/24] qemu-nbd: add option to set detect-zeroes mode
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 15/24] qemu-nbd: add option to set detect-zeroes mode |
Date: |
Mon, 8 Sep 2014 11:51:40 +0100 |
From: Peter Lieven <address@hidden>
Signed-off-by: Peter Lieven <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Benoit Canet <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
qemu-nbd.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/qemu-nbd.c b/qemu-nbd.c
index 626e584..6ef8b10 100644
--- a/qemu-nbd.c
+++ b/qemu-nbd.c
@@ -18,11 +18,13 @@
#include "qemu-common.h"
#include "block/block.h"
+#include "block/block_int.h"
#include "block/nbd.h"
#include "qemu/main-loop.h"
#include "qemu/sockets.h"
#include "qemu/error-report.h"
#include "block/snapshot.h"
+#include "qapi/util.h"
#include <stdarg.h>
#include <stdio.h>
@@ -41,6 +43,7 @@
#define QEMU_NBD_OPT_CACHE 1
#define QEMU_NBD_OPT_AIO 2
#define QEMU_NBD_OPT_DISCARD 3
+#define QEMU_NBD_OPT_DETECT_ZEROES 4
static NBDExport *exp;
static int verbose;
@@ -96,6 +99,8 @@ static void usage(const char *name)
#ifdef CONFIG_LINUX_AIO
" --aio=MODE set AIO mode (native or threads)\n"
#endif
+" --discard=MODE set discard mode (ignore, unmap)\n"
+" --detect-zeroes=MODE set detect-zeroes mode (off, on, discard)\n"
"\n"
"Report bugs to <address@hidden>\n"
, name, NBD_DEFAULT_PORT, "DEVICE");
@@ -410,6 +415,7 @@ int main(int argc, char **argv)
{ "aio", 1, NULL, QEMU_NBD_OPT_AIO },
#endif
{ "discard", 1, NULL, QEMU_NBD_OPT_DISCARD },
+ { "detect-zeroes", 1, NULL, QEMU_NBD_OPT_DETECT_ZEROES },
{ "shared", 1, NULL, 'e' },
{ "format", 1, NULL, 'f' },
{ "persistent", 0, NULL, 't' },
@@ -432,6 +438,7 @@ int main(int argc, char **argv)
pthread_t client_thread;
const char *fmt = NULL;
Error *local_err = NULL;
+ BlockdevDetectZeroesOptions detect_zeroes =
BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF;
/* The client thread uses SIGTERM to interrupt the server. A signal
* handler ensures that "qemu-nbd -v -c" exits with a nice status code.
@@ -483,6 +490,23 @@ int main(int argc, char **argv)
errx(EXIT_FAILURE, "Invalid discard mode `%s'", optarg);
}
break;
+ case QEMU_NBD_OPT_DETECT_ZEROES:
+ detect_zeroes =
+ qapi_enum_parse(BlockdevDetectZeroesOptions_lookup,
+ optarg,
+ BLOCKDEV_DETECT_ZEROES_OPTIONS_MAX,
+ BLOCKDEV_DETECT_ZEROES_OPTIONS_OFF,
+ &local_err);
+ if (local_err) {
+ errx(EXIT_FAILURE, "Failed to parse detect_zeroes mode: %s",
+ error_get_pretty(local_err));
+ }
+ if (detect_zeroes == BLOCKDEV_DETECT_ZEROES_OPTIONS_UNMAP &&
+ !(flags & BDRV_O_UNMAP)) {
+ errx(EXIT_FAILURE, "setting detect-zeroes to unmap is not
allowed "
+ "without setting discard operation to
unmap");
+ }
+ break;
case 'b':
bindto = optarg;
break;
@@ -686,6 +710,7 @@ int main(int argc, char **argv)
error_get_pretty(local_err));
}
+ bs->detect_zeroes = detect_zeroes;
fd_size = bdrv_getlength(bs);
if (partition != -1) {
--
1.9.3
- [Qemu-devel] [PULL 06/24] libqos: Added basic virtqueue support to virtio implementation, (continued)
- [Qemu-devel] [PULL 06/24] libqos: Added basic virtqueue support to virtio implementation, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 07/24] libqos: Added indirect descriptor support to virtio implementation, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 08/24] libqos: Added test case for configuration changes in virtio-blk test, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 09/24] libqos: Added MSI-X support, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 10/24] libqos: Added EVENT_IDX support, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 12/24] qemu-img: fix rebase src_cache option documentation, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 11/24] qemu-img: clarify src_cache option documentation, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 17/24] MAINTAINERS: update sheepdog maintainer, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 16/24] qemu-nbd: fix indentation and coding style, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 13/24] block/archipelago: Use QEMU atomic builtins, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 15/24] qemu-nbd: add option to set detect-zeroes mode,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 18/24] libqos: add a simple first-fit memory allocator, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 14/24] rename parse_enum_option to qapi_enum_parse and make it public, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 19/24] qtest/ide: Uninitialize PC allocator, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 20/24] ide: Add wwn support to IDE-ATAPI drive, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 21/24] vmdk: fix vmdk_parse_extents() extent_file leaks, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 22/24] vmdk: fix buf leak in vmdk_parse_extents(), Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 23/24] IDE: Fill the IDENTIFY request consistently, Stefan Hajnoczi, 2014/09/08
- [Qemu-devel] [PULL 24/24] ide: Add resize callback to ide/core, Stefan Hajnoczi, 2014/09/08
- Re: [Qemu-devel] [PULL v2 00/24] Block patches, Peter Maydell, 2014/09/08