qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, pl@kamp.de, stefanha@redhat.com
Subject: [Qemu-devel] [PATCH 10/17] block: define get_block_status return value
Date: Wed,  3 Jul 2013 16:34:24 +0200	[thread overview]
Message-ID: <1372862071-28225-11-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1372862071-28225-1-git-send-email-pbonzini@redhat.com>

Define the return value of get_block_status.  Bits 0, 1, 2 and 8-62
are valid; bit 63 (the sign bit) is reserved for errors.  Bits 3-7
are left for future extensions.

The return code is compatible with the old is_allocated API: returning
just 0 or 1 (aka BDRV_BLOCK_DATA) will not cause any behavioral change
in clients of is_allocated.  We will return more precise information
in the next patches.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block.c               |  7 +++++--
 include/block/block.h | 23 +++++++++++++++++++++++
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/block.c b/block.c
index aa1a5f7..8931cac 100644
--- a/block.c
+++ b/block.c
@@ -2976,7 +2976,7 @@ static int64_t coroutine_fn bdrv_co_get_block_status(BlockDriverState *bs,
 
     if (!bs->drv->bdrv_co_get_block_status) {
         *pnum = nb_sectors;
-        return 1;
+        return BDRV_BLOCK_DATA;
     }
 
     return bs->drv->bdrv_co_get_block_status(bs, sector_num, nb_sectors, pnum);
@@ -3026,7 +3026,10 @@ int64_t bdrv_get_block_status(BlockDriverState *bs, int64_t sector_num,
 int coroutine_fn bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num,
                                    int nb_sectors, int *pnum)
 {
-    return bdrv_get_block_status(bs, sector_num, nb_sectors, pnum);
+    int64_t ret = bdrv_get_block_status(bs, sector_num, nb_sectors, pnum);
+    return
+        (ret & BDRV_BLOCK_DATA) ||
+        ((ret & BDRV_BLOCK_ZERO) && !bdrv_has_zero_init(bs));
 }
 
 /*
diff --git a/include/block/block.h b/include/block/block.h
index 2b50b51..9e44bdd 100644
--- a/include/block/block.h
+++ b/include/block/block.h
@@ -81,6 +81,29 @@ typedef struct BlockDevOps {
 #define BDRV_SECTOR_SIZE   (1ULL << BDRV_SECTOR_BITS)
 #define BDRV_SECTOR_MASK   ~(BDRV_SECTOR_SIZE - 1)
 
+/* BDRV_BLOCK_DATA: data is read from bs->file or another file
+ * BDRV_BLOCK_ZERO: sectors read as zero
+ * BDRV_BLOCK_OFFSET_VALID: contents of sector available in bs->file at offset
+ *
+ * DATA == 0 && ZERO == 0 means that data is read from backing_hd if present.
+ *
+ * DATA ZERO OFFSET_VALID
+ *  t    t        t       sectors read as zero, bs->file is zero at offset
+ *  t    f        t       sectors read as valid from bs->file at offset
+ *  f    t        t       sectors preallocated, read as zero, bs->file not
+ *                        necessarily zero at offset
+ *  f    f        t       sectors preallocated but read from backing_hd,
+ *                        bs->file contains garbage at offset
+ *  t    t        f       sectors preallocated, read as zero, unknown offset
+ *  t    f        f       sectors read from unknown file or offset
+ *  f    t        f       not allocated or unknown offset, read as zero
+ *  f    f        f       not allocated or unknown offset, read from backing_hd
+ */
+#define BDRV_BLOCK_DATA         1
+#define BDRV_BLOCK_ZERO         2
+#define BDRV_BLOCK_OFFSET_VALID 4
+#define BDRV_BLOCK_OFFSET_MASK  BDRV_SECTOR_MASK
+
 typedef enum {
     BDRV_ACTION_REPORT, BDRV_ACTION_IGNORE, BDRV_ACTION_STOP
 } BlockErrorAction;
-- 
1.8.2.1

  parent reply	other threads:[~2013-07-03 14:35 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-03 14:34 [Qemu-devel] [PATCH 00/17] Add qemu-img subcommand to dump file metadata Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 01/17] cow: make reads go at a decent speed Paolo Bonzini
2013-07-04  2:20   ` Fam Zheng
2013-07-04  8:08     ` Paolo Bonzini
2013-07-05  9:09   ` Stefan Hajnoczi
2013-07-03 14:34 ` [Qemu-devel] [PATCH 02/17] cow: make writes go at a less indecent speed Paolo Bonzini
2013-07-04  2:40   ` Fam Zheng
2013-07-04  8:11     ` Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 03/17] cow: do not call bdrv_co_is_allocated Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 04/17] block: make bdrv_co_is_allocated static Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 05/17] block: remove bdrv_is_allocated_above/bdrv_co_is_allocated_above distinction Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 06/17] block: expect errors from bdrv_co_is_allocated Paolo Bonzini
2013-07-05  9:19   ` Stefan Hajnoczi
2013-07-05 10:28     ` Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 07/17] qemu-img: always probe the input image for allocated sectors Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 08/17] block: make bdrv_has_zero_init return false for copy-on-write-images Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 09/17] block: introduce bdrv_get_block_status API Paolo Bonzini
2013-07-03 14:34 ` Paolo Bonzini [this message]
2013-07-03 21:04   ` [Qemu-devel] [PATCH 10/17] block: define get_block_status return value Peter Lieven
2013-07-04  8:13     ` Paolo Bonzini
2013-07-04 21:10       ` Peter Lieven
2013-07-05  0:49         ` Fam Zheng
2013-07-03 14:34 ` [Qemu-devel] [PATCH 11/17] block: return get_block_status data and flags for formats Paolo Bonzini
2013-07-04  3:22   ` Fam Zheng
2013-07-04  8:14     ` Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 12/17] qemu-img: add a "map" subcommand Paolo Bonzini
2013-07-04  5:34   ` Fam Zheng
2013-07-04  8:16     ` Paolo Bonzini
2013-07-04  8:36       ` Fam Zheng
2013-07-16  3:31   ` Stefan Hajnoczi
2013-07-16  6:26     ` Paolo Bonzini
2013-07-18 20:04   ` Eric Blake
2013-07-19  4:48     ` Stefan Hajnoczi
2013-07-19  5:54       ` Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 13/17] block: use bdrv_has_zero_init to return BDRV_BLOCK_ZERO Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 14/17] raw-posix: return get_block_status data and flags Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 15/17] raw-posix: detect XFS unwritten extents Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 16/17] block: add default get_block_status implementation for protocols Paolo Bonzini
2013-07-16  6:47   ` Peter Lieven
2013-07-16  7:19     ` Paolo Bonzini
2013-07-16  7:54       ` Peter Lieven
2013-07-16  9:37         ` Paolo Bonzini
2013-07-17 10:26       ` Peter Lieven
2013-07-17 10:33         ` Paolo Bonzini
2013-07-03 14:34 ` [Qemu-devel] [PATCH 17/17] block: look for zero blocks in bs->file Paolo Bonzini
2013-07-16  3:41 ` [Qemu-devel] [PATCH 00/17] Add qemu-img subcommand to dump file metadata Stefan Hajnoczi
2013-07-16  6:49   ` Peter Lieven
2013-07-18  3:54     ` Stefan Hajnoczi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1372862071-28225-11-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=pl@kamp.de \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).