From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:58645) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SANpk-0007k1-QI for qemu-devel@nongnu.org; Wed, 21 Mar 2012 11:52:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SANpc-00033c-ED for qemu-devel@nongnu.org; Wed, 21 Mar 2012 11:52:20 -0400 Received: from mail-we0-f173.google.com ([74.125.82.173]:34277) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SANpc-00031t-5M for qemu-devel@nongnu.org; Wed, 21 Mar 2012 11:52:12 -0400 Received: by werp12 with SMTP id p12so1247295wer.4 for ; Wed, 21 Mar 2012 08:52:10 -0700 (PDT) From: =?UTF-8?q?Beno=C3=AEt=20Canet?= Date: Wed, 21 Mar 2012 16:52:01 +0100 Message-Id: <1332345124-381-5-git-send-email-benoit.canet@gmail.com> In-Reply-To: <1332345124-381-1-git-send-email-benoit.canet@gmail.com> References: <1332345124-381-1-git-send-email-benoit.canet@gmail.com> Subject: [Qemu-devel] [PATCH V2 4/7] qed: add bdrv_invalidate_cache to be called after incoming live migration List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, pbonzini@redhat.com, =?UTF-8?q?Beno=C3=AEt=20Canet?= , stefanha@linux.vnet.ibm.com The QED image is reopened to flush metadata and check consistency. Signed-off-by: Benoit Canet --- block/qed.c | 15 +++++++++++++++ block/qed.h | 1 + 2 files changed, 16 insertions(+), 0 deletions(-) diff --git a/block/qed.c b/block/qed.c index a041d31..c47272c 100644 --- a/block/qed.c +++ b/block/qed.c @@ -375,6 +375,10 @@ static int bdrv_qed_open(BlockDriverState *bs, int flags) int ret; s->bs = bs; + + /* backup flags for bdrv_qed_invalidate_cache */ + s->flags = flags; + QSIMPLEQ_INIT(&s->allocating_write_reqs); ret = bdrv_pread(bs->file, 0, &le_header, sizeof(le_header)); @@ -1516,6 +1520,16 @@ static int bdrv_qed_change_backing_file(BlockDriverState *bs, return ret; } +static void bdrv_qed_invalidate_cache(BlockDriverState *bs) +{ + BDRVQEDState *s = bs->opaque; + int flags = s->flags; + + bdrv_qed_close(bs); + memset(s, 0, sizeof(BDRVQEDState)); + bdrv_qed_open(bs, flags); +} + static int bdrv_qed_check(BlockDriverState *bs, BdrvCheckResult *result) { BDRVQEDState *s = bs->opaque; @@ -1568,6 +1582,7 @@ static BlockDriver bdrv_qed = { .bdrv_getlength = bdrv_qed_getlength, .bdrv_get_info = bdrv_qed_get_info, .bdrv_change_backing_file = bdrv_qed_change_backing_file, + .bdrv_invalidate_cache = bdrv_qed_invalidate_cache, .bdrv_check = bdrv_qed_check, }; diff --git a/block/qed.h b/block/qed.h index 62624a1..cb1ebd8 100644 --- a/block/qed.h +++ b/block/qed.h @@ -153,6 +153,7 @@ typedef struct QEDAIOCB { typedef struct { BlockDriverState *bs; /* device */ + int flags; /* open flags */ uint64_t file_size; /* length of image file, in bytes */ QEDHeader header; /* always cpu-endian */ -- 1.7.7.6