diff mbox

[for,2.1,V3] qemu-img info: show nocow info

Message ID 1404873793-7999-1-git-send-email-cyliu@suse.com
State New
Headers show

Commit Message

Chunyan Liu July 9, 2014, 2:43 a.m. UTC
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 <cyliu@suse.com>
---
Changes:
  - update output info to "NOCOW flag: set"

 block/qapi.c         | 25 +++++++++++++++++++++++++
 qapi/block-core.json |  5 ++++-
 2 files changed, 29 insertions(+), 1 deletion(-)

Comments

Eric Blake July 9, 2014, 2:53 a.m. UTC | #1
On 07/08/2014 08:43 PM, Chunyan Liu wrote:
> 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 <cyliu@suse.com>
> ---
> Changes:
>   - update output info to "NOCOW flag: set"
> 

Reviewed-by: Eric Blake <eblake@redhat.com>

counts as a completion of a new feature in 2.1
Stefan Hajnoczi July 28, 2014, 3:19 p.m. UTC | #2
On Wed, Jul 09, 2014 at 10:43:13AM +0800, Chunyan Liu wrote:
> 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 <cyliu@suse.com>
> ---
> Changes:
>   - update output info to "NOCOW flag: set"
> 
>  block/qapi.c         | 25 +++++++++++++++++++++++++
>  qapi/block-core.json |  5 ++++-
>  2 files changed, 29 insertions(+), 1 deletion(-)

This patch was sent on July 9th, after the 2.1 soft freeze when we stop
merging new features.  Soft freeze was 17th of June.

Please resend for QEMU 2.2 and update the qapi-schema.json version
comment.

Thanks,
Stefan
Eric Blake July 28, 2014, 6:58 p.m. UTC | #3
On 07/28/2014 09:19 AM, Stefan Hajnoczi wrote:
> On Wed, Jul 09, 2014 at 10:43:13AM +0800, Chunyan Liu wrote:
>> 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 <cyliu@suse.com>
>> ---
>> Changes:
>>   - update output info to "NOCOW flag: set"
>>
>>  block/qapi.c         | 25 +++++++++++++++++++++++++
>>  qapi/block-core.json |  5 ++++-
>>  2 files changed, 29 insertions(+), 1 deletion(-)
> 
> This patch was sent on July 9th, after the 2.1 soft freeze when we stop
> merging new features.  Soft freeze was 17th of June.
> 
> Please resend for QEMU 2.2 and update the qapi-schema.json version
> comment.

There's still the argument that this is a bug fix for an incomplete
implementation of a new feature that IS in qemu 2.1 (that is, 2.1 is
adding the ability to set the nocow flag, but without this patch, that
addition is a write-only interface, and this patch is correcting the bug
to allow it to be a read-write interface).

But it is fairly late in the game - what is the level of damage if 2.1
is released with a write-only setting, and this patch is deferred to
2.2?  Without some strong justification, I can agree with the decision
to postpone this patch.
Stefan Hajnoczi July 29, 2014, 1:41 p.m. UTC | #4
On Mon, Jul 28, 2014 at 12:58:33PM -0600, Eric Blake wrote:
> On 07/28/2014 09:19 AM, Stefan Hajnoczi wrote:
> > On Wed, Jul 09, 2014 at 10:43:13AM +0800, Chunyan Liu wrote:
> >> 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 <cyliu@suse.com>
> >> ---
> >> Changes:
> >>   - update output info to "NOCOW flag: set"
> >>
> >>  block/qapi.c         | 25 +++++++++++++++++++++++++
> >>  qapi/block-core.json |  5 ++++-
> >>  2 files changed, 29 insertions(+), 1 deletion(-)
> > 
> > This patch was sent on July 9th, after the 2.1 soft freeze when we stop
> > merging new features.  Soft freeze was 17th of June.
> > 
> > Please resend for QEMU 2.2 and update the qapi-schema.json version
> > comment.
> 
> There's still the argument that this is a bug fix for an incomplete
> implementation of a new feature that IS in qemu 2.1 (that is, 2.1 is
> adding the ability to set the nocow flag, but without this patch, that
> addition is a write-only interface, and this patch is correcting the bug
> to allow it to be a read-write interface).
> 
> But it is fairly late in the game - what is the level of damage if 2.1
> is released with a write-only setting, and this patch is deferred to
> 2.2?  Without some strong justification, I can agree with the decision
> to postpone this patch.

You can use lsattr(1), so I see no critical need.

Stefan
diff mbox

Patch

diff --git a/block/qapi.c b/block/qapi.c
index f44f6b4..aa53f19 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)
 {
@@ -173,6 +180,20 @@  void bdrv_query_image_info(BlockDriverState *bs,
     Error *err = NULL;
     ImageInfo *info = g_new0(ImageInfo, 1);
 
+#ifdef __linux__
+    int fd, attr;
+
+    /* 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
+
     bdrv_get_geometry(bs, &total_sectors);
 
     info->filename        = g_strdup(bs->filename);
@@ -625,4 +646,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..deb785b 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.1)
+#
 # 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: