[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 28/38] qemu-io: Add discard command
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 28/38] qemu-io: Add discard command |
Date: |
Fri, 17 Dec 2010 18:44:43 +0100 |
From: Stefan Hajnoczi <address@hidden>
discard [-Cq] off len -- discards a number of bytes at a specified
offset
discards a range of bytes from the given offset
Example:
'discard 512 1k' - discards 1 kilobyte from 512 bytes into the file
Discards a segment of the currently open file.
-C, -- report statistics in a machine parsable format
-q, -- quite mode, do not show I/O statistics
Signed-off-by: Stefan Hajnoczi <address@hidden>
Signed-off-by: Kevin Wolf <address@hidden>
---
qemu-io.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 88 insertions(+), 0 deletions(-)
diff --git a/qemu-io.c b/qemu-io.c
index 0f6d1b6..2318a28 100644
--- a/qemu-io.c
+++ b/qemu-io.c
@@ -1394,6 +1394,93 @@ static const cmdinfo_t info_cmd = {
.oneline = "prints information about the current file",
};
+static void
+discard_help(void)
+{
+ printf(
+"\n"
+" discards a range of bytes from the given offset\n"
+"\n"
+" Example:\n"
+" 'discard 512 1k' - discards 1 kilobyte from 512 bytes into the file\n"
+"\n"
+" Discards a segment of the currently open file.\n"
+" -C, -- report statistics in a machine parsable format\n"
+" -q, -- quite mode, do not show I/O statistics\n"
+"\n");
+}
+
+static int discard_f(int argc, char **argv);
+
+static const cmdinfo_t discard_cmd = {
+ .name = "discard",
+ .altname = "d",
+ .cfunc = discard_f,
+ .argmin = 2,
+ .argmax = -1,
+ .args = "[-Cq] off len",
+ .oneline = "discards a number of bytes at a specified offset",
+ .help = discard_help,
+};
+
+static int
+discard_f(int argc, char **argv)
+{
+ struct timeval t1, t2;
+ int Cflag = 0, qflag = 0;
+ int c, ret;
+ int64_t offset;
+ int count;
+
+ while ((c = getopt(argc, argv, "Cq")) != EOF) {
+ switch (c) {
+ case 'C':
+ Cflag = 1;
+ break;
+ case 'q':
+ qflag = 1;
+ break;
+ default:
+ return command_usage(&discard_cmd);
+ }
+ }
+
+ if (optind != argc - 2) {
+ return command_usage(&discard_cmd);
+ }
+
+ offset = cvtnum(argv[optind]);
+ if (offset < 0) {
+ printf("non-numeric length argument -- %s\n", argv[optind]);
+ return 0;
+ }
+
+ optind++;
+ count = cvtnum(argv[optind]);
+ if (count < 0) {
+ printf("non-numeric length argument -- %s\n", argv[optind]);
+ return 0;
+ }
+
+ gettimeofday(&t1, NULL);
+ ret = bdrv_discard(bs, offset, count);
+ gettimeofday(&t2, NULL);
+
+ if (ret < 0) {
+ printf("discard failed: %s\n", strerror(-ret));
+ goto out;
+ }
+
+ /* Finally, report back -- -C gives a parsable format */
+ if (!qflag) {
+ t2 = tsub(t2, t1);
+ print_report("discard", &t2, offset, count, count, 1, Cflag);
+ }
+
+out:
+ return 0;
+}
+
static int
alloc_f(int argc, char **argv)
{
@@ -1715,6 +1802,7 @@ int main(int argc, char **argv)
add_command(&truncate_cmd);
add_command(&length_cmd);
add_command(&info_cmd);
+ add_command(&discard_cmd);
add_command(&alloc_cmd);
add_command(&map_cmd);
--
1.7.2.3
- [Qemu-devel] [PATCH 05/38] qemu-img.c: Clean up handling of image size in img_create(), (continued)
- [Qemu-devel] [PATCH 05/38] qemu-img.c: Clean up handling of image size in img_create(), Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 01/38] blockdev: check dinfo ptr before using, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 07/38] ide: fix whitespace gap in ide_exec_cmd, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 14/38] config: move ide core and pci to pci.mak, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 21/38] Prevent creating an image with the same filename as backing file, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 20/38] Introduce do_snapshot_blkdev() and monitor command to handle it., Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 19/38] qemu-img.c: Re-factor img_create(), Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 25/38] ide: Register vm change state handler once only, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 18/38] qemu-img: Call error_set_progname, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 16/38] ahci: set SATA Mode Select, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 28/38] qemu-io: Add discard command,
Kevin Wolf <=
- [Qemu-devel] [PATCH 30/38] qemu-io: Fix typo in help texts, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 17/38] ide: honor ncq for atapi, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 31/38] docs: Add QED image format specification, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 32/38] qed: Add QEMU Enhanced Disk image format, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 38/38] docs: Fix missing carets in QED specification, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 27/38] scsi-disk: support WRITE SAME (16) with unmap bit, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 23/38] qemu.img.c: Use error_report() instead of own error() implementation, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 36/38] block/qcow2.c: rename qcow_ functions to qcow2_, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 29/38] raw-posix: add discard support, Kevin Wolf, 2010/12/17
- [Qemu-devel] [PATCH 35/38] qed: Consistency check support, Kevin Wolf, 2010/12/17