From patchwork Wed Apr 5 15:12:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Denis V. Lunev" X-Patchwork-Id: 9664415 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 968E5602B5 for ; Wed, 5 Apr 2017 15:13:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8540027FA3 for ; Wed, 5 Apr 2017 15:13:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 79EF828113; Wed, 5 Apr 2017 15:13:35 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 27AD827FA3 for ; Wed, 5 Apr 2017 15:13:35 +0000 (UTC) Received: from localhost ([::1]:40958 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cvmco-0006Ui-62 for patchwork-qemu-devel@patchwork.kernel.org; Wed, 05 Apr 2017 11:13:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59518) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cvmbX-0006Re-Pc for qemu-devel@nongnu.org; Wed, 05 Apr 2017 11:12:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cvmbU-0007aE-NX for qemu-devel@nongnu.org; Wed, 05 Apr 2017 11:12:15 -0400 Received: from mailhub.sw.ru ([195.214.232.25]:27104 helo=relay.sw.ru) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cvmbU-0007VA-Ce for qemu-devel@nongnu.org; Wed, 05 Apr 2017 11:12:12 -0400 Received: from iris.sw.ru (msk-vpn.virtuozzo.com [195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id v35FC6n6022233; Wed, 5 Apr 2017 18:12:08 +0300 (MSK) From: "Denis V. Lunev" To: qemu-devel@nongnu.org Date: Wed, 5 Apr 2017 18:12:05 +0300 Message-Id: <1491405126-30591-2-git-send-email-den@openvz.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491405126-30591-1-git-send-email-den@openvz.org> References: <1491405126-30591-1-git-send-email-den@openvz.org> X-detected-operating-system: by eggs.gnu.org: OpenBSD 3.x [fuzzy] X-Received-From: 195.214.232.25 Subject: [Qemu-devel] [PATCH 1/2] parallels: create parallels_inactivate() callback of block driver state X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "Denis V. Lunev" , Stefan Hajnoczi Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP We should avoid to image file at migration end when BDRV_O_INACTIVE is set on the block driver state. All modifications should be done in advance, i.e. in bdrv_inactivate. The patch also adds final bdrv_flush() to be sure that changes have reached disk finally before other side will access the image. Signed-off-by: Denis V. Lunev CC: Stefan Hajnoczi --- block/parallels.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/block/parallels.c b/block/parallels.c index 90acf79..9dea09e 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -728,18 +728,35 @@ fail_options: goto fail; } - -static void parallels_close(BlockDriverState *bs) +static int parallels_inactivate(BlockDriverState *bs) { + int err; BDRVParallelsState *s = bs->opaque; - if (bs->open_flags & BDRV_O_RDWR) { - s->header->inuse = 0; - parallels_update_header(bs); + if (!(bs->open_flags & BDRV_O_RDWR)) { + return 0; + } + + s->header->inuse = 0; + err = parallels_update_header(bs); + if (err < 0) { + return err; + } + + err = bdrv_truncate(bs->file, s->data_end << BDRV_SECTOR_BITS); + if (err < 0) { + return err; } - if (bs->open_flags & BDRV_O_RDWR) { - bdrv_truncate(bs->file, s->data_end << BDRV_SECTOR_BITS); + return bdrv_flush(bs->file->bs); +} + +static void parallels_close(BlockDriverState *bs) +{ + BDRVParallelsState *s = bs->opaque; + + if (!(bs->open_flags & BDRV_O_INACTIVE)) { + parallels_inactivate(bs); } g_free(s->bat_dirty_bmap); @@ -777,6 +794,7 @@ static BlockDriver bdrv_parallels = { .bdrv_co_flush_to_os = parallels_co_flush_to_os, .bdrv_co_readv = parallels_co_readv, .bdrv_co_writev = parallels_co_writev, + .bdrv_inactivate = parallels_inactivate, .bdrv_create = parallels_create, .bdrv_check = parallels_check,