[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 21/62] qemu-img info: show nocow info
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PULL 21/62] qemu-img info: show nocow info |
Date: |
Fri, 8 Aug 2014 19:39:22 +0200 |
From: Chunyan Liu <address@hidden>
Add nocow info in 'qemu-img info' output to show whether the file
currently has NOCOW flag set or not.
Signed-off-by: Chunyan Liu <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
block/qapi.c | 26 ++++++++++++++++++++++++++
qapi/block-core.json | 5 ++++-
2 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/block/qapi.c b/block/qapi.c
index 28ebb62..79d1e6a 100644
--- a/block/qapi.c
+++ b/block/qapi.c
@@ -28,6 +28,13 @@
#include "qapi-visit.h"
#include "qapi/qmp-output-visitor.h"
#include "qapi/qmp/types.h"
+#ifdef __linux__
+#include <linux/fs.h>
+#include <sys/ioctl.h>
+#ifndef FS_NOCOW_FL
+#define FS_NOCOW_FL 0x00800000 /* Do not cow file */
+#endif
+#endif
BlockDeviceInfo *bdrv_block_device_info(BlockDriverState *bs)
{
@@ -172,6 +179,9 @@ void bdrv_query_image_info(BlockDriverState *bs,
int ret;
Error *err = NULL;
ImageInfo *info;
+#ifdef __linux__
+ int fd, attr;
+#endif
size = bdrv_getlength(bs);
if (size < 0) {
@@ -201,6 +211,18 @@ void bdrv_query_image_info(BlockDriverState *bs,
info->format_specific = bdrv_get_specific_info(bs);
info->has_format_specific = info->format_specific != NULL;
+#ifdef __linux__
+ /* get NOCOW info */
+ fd = qemu_open(bs->filename, O_RDONLY | O_NONBLOCK);
+ if (fd >= 0) {
+ if (ioctl(fd, FS_IOC_GETFLAGS, &attr) == 0 && (attr & FS_NOCOW_FL)) {
+ info->has_nocow = true;
+ info->nocow = true;
+ }
+ qemu_close(fd);
+ }
+#endif
+
backing_filename = bs->backing_file;
if (backing_filename[0] != '\0') {
info->backing_filename = g_strdup(backing_filename);
@@ -631,4 +653,8 @@ void bdrv_image_info_dump(fprintf_function func_fprintf,
void *f,
func_fprintf(f, "Format specific information:\n");
bdrv_image_info_specific_dump(func_fprintf, f, info->format_specific);
}
+
+ if (info->has_nocow && info->nocow) {
+ func_fprintf(f, "NOCOW flag: set\n");
+ }
}
diff --git a/qapi/block-core.json b/qapi/block-core.json
index e378653..72b4015 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -115,6 +115,8 @@
# @format-specific: #optional structure supplying additional format-specific
# information (since 1.7)
#
+# @nocow: #optional info of whether NOCOW flag is set or not. (since 2.2)
+#
# Since: 1.3
#
##
@@ -126,7 +128,8 @@
'*backing-filename': 'str', '*full-backing-filename': 'str',
'*backing-filename-format': 'str', '*snapshots': ['SnapshotInfo'],
'*backing-image': 'ImageInfo',
- '*format-specific': 'ImageInfoSpecific' } }
+ '*format-specific': 'ImageInfoSpecific',
+ '*nocow': 'bool' } }
##
# @ImageCheck:
--
1.8.3.1
- [Qemu-devel] [PULL 10/62] block: Drop superfluous aligning of bdrv_getlength()'s value, (continued)
- [Qemu-devel] [PULL 10/62] block: Drop superfluous aligning of bdrv_getlength()'s value, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 11/62] qemu-img: Make img_convert() get image size just once per image, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 12/62] block: Avoid bdrv_get_geometry() where errors should be detected, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 14/62] configure: explicitly state version requirements to devel packages, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 15/62] xen_disk: fix possible null-ptr dereference, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 13/62] docs: Make the recommendation for the backing file name position a requirement, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 16/62] docs/multiple-iothreads.txt: add documentation on IOThread programming, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 18/62] qdev-monitor: include QOM properties in -device FOO, help output, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 17/62] qmp: hide "hotplugged" device property from device-list-properties, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 19/62] qemu-iotests: Add data pattern in version3 VMDK sample image in 059, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 21/62] qemu-img info: show nocow info,
Kevin Wolf <=
- [Qemu-devel] [PULL 20/62] vmdk: Optimize cluster allocation, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 24/62] block/archipelago: Add support for creating images, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 23/62] block/archipelago: Implement bdrv_parse_filename(), Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 25/62] QMP: Add support for Archipelago, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 22/62] block: Support Archipelago as a QEMU block backend, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 26/62] qemu-iotests: add support for Archipelago protocol, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 27/62] coroutine: make pool size dynamic, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 28/62] block: bump coroutine pool size for drives, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 29/62] thread-pool: avoid per-thread-pool EventNotifier, Kevin Wolf, 2014/08/08
- [Qemu-devel] [PULL 30/62] thread-pool: avoid deadlock in nested aio_poll() calls, Kevin Wolf, 2014/08/08