From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:43270) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RFpPn-0004XN-CC for qemu-devel@nongnu.org; Mon, 17 Oct 2011 11:47:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RFpPk-0002DL-5Q for qemu-devel@nongnu.org; Mon, 17 Oct 2011 11:47:46 -0400 Received: from mtagate7.uk.ibm.com ([194.196.100.167]:59288) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RFpPj-0002CF-Uf for qemu-devel@nongnu.org; Mon, 17 Oct 2011 11:47:44 -0400 Received: from d06nrmr1707.portsmouth.uk.ibm.com (d06nrmr1707.portsmouth.uk.ibm.com [9.149.39.225]) by mtagate7.uk.ibm.com (8.13.1/8.13.1) with ESMTP id p9HFlexx021059 for ; Mon, 17 Oct 2011 15:47:40 GMT Received: from d06av09.portsmouth.uk.ibm.com (d06av09.portsmouth.uk.ibm.com [9.149.37.250]) by d06nrmr1707.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p9HFlerj2363414 for ; Mon, 17 Oct 2011 16:47:40 +0100 Received: from d06av09.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av09.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p9HFldnb007632 for ; Mon, 17 Oct 2011 09:47:39 -0600 From: Stefan Hajnoczi Date: Mon, 17 Oct 2011 16:47:28 +0100 Message-Id: <1318866452-30026-3-git-send-email-stefanha@linux.vnet.ibm.com> In-Reply-To: <1318866452-30026-1-git-send-email-stefanha@linux.vnet.ibm.com> References: <1318866452-30026-1-git-send-email-stefanha@linux.vnet.ibm.com> Subject: [Qemu-devel] [RFC 2/6] block: add bdrv_set_copy_on_read() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Kevin Wolf , Paolo Bonzini , Marcelo Tosatti , Stefan Hajnoczi The bdrv_set_copy_on_read() function can be used to programmatically enable or disable copy-on-read for a block device. Later patches add the actual copy-on-read logic. Signed-off-by: Stefan Hajnoczi --- block.c | 17 +++++++++++++++++ block.h | 3 +++ block_int.h | 1 + 3 files changed, 21 insertions(+), 0 deletions(-) diff --git a/block.c b/block.c index 2d2c62a..e624ac3 100644 --- a/block.c +++ b/block.c @@ -464,6 +464,18 @@ int bdrv_parse_cache_flags(const char *mode, int *flags) return 0; } +void bdrv_set_copy_on_read(BlockDriverState *bs, int enable) +{ + if (bs->copy_on_read != enable) { + if (enable) { + bdrv_start_request_tracking(bs); + } else { + bdrv_stop_request_tracking(bs); + } + } + bs->copy_on_read = enable; +} + /* * Common part for opening disk images and files */ @@ -483,6 +495,11 @@ static int bdrv_open_common(BlockDriverState *bs, const char *filename, bs->open_flags = flags; bs->buffer_alignment = 512; + bs->copy_on_read = 0; + if (flags & BDRV_O_RDWR) { + bdrv_set_copy_on_read(bs, !!(flags & BDRV_O_COPY_ON_READ)); + } + pstrcpy(bs->filename, sizeof(bs->filename), filename); if (use_bdrv_whitelist && !bdrv_is_whitelisted(drv)) { diff --git a/block.h b/block.h index e77988e..cb9832c 100644 --- a/block.h +++ b/block.h @@ -61,6 +61,7 @@ typedef struct BlockDevOps { #define BDRV_O_NATIVE_AIO 0x0080 /* use native AIO instead of the thread pool */ #define BDRV_O_NO_BACKING 0x0100 /* don't open the backing file */ #define BDRV_O_NO_FLUSH 0x0200 /* disable flushing on this disk */ +#define BDRV_O_COPY_ON_READ 0x0400 /* copy read backing sectors into image */ #define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_CACHE_WB | BDRV_O_NO_FLUSH) @@ -291,6 +292,8 @@ void bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, int nr_sectors); int64_t bdrv_get_dirty_count(BlockDriverState *bs); +void bdrv_set_copy_on_read(BlockDriverState *bs, int enable); + void bdrv_set_in_use(BlockDriverState *bs, int in_use); int bdrv_in_use(BlockDriverState *bs); diff --git a/block_int.h b/block_int.h index 87ce8b4..8eb4795 100644 --- a/block_int.h +++ b/block_int.h @@ -160,6 +160,7 @@ struct BlockDriverState { int encrypted; /* if true, the media is encrypted */ int valid_key; /* if true, a valid encryption key has been set */ int sg; /* if true, the device is a /dev/sg* */ + int copy_on_read; /* if true, copy read backing sectors into image */ BlockDriver *drv; /* NULL means no media */ void *opaque; -- 1.7.6.3