From nobody Tue Oct 28 02:08:41 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1516188629192953.9338587637739; Wed, 17 Jan 2018 03:30:29 -0800 (PST) Received: from localhost ([::1]:56728 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eblvI-0004P2-9I for importer@patchew.org; Wed, 17 Jan 2018 06:30:28 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48619) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eblqb-0000b9-HC for qemu-devel@nongnu.org; Wed, 17 Jan 2018 06:25:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eblqa-000438-BB for qemu-devel@nongnu.org; Wed, 17 Jan 2018 06:25:37 -0500 Received: from mail-wr0-x244.google.com ([2a00:1450:400c:c0c::244]:45341) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eblqa-000426-3N; Wed, 17 Jan 2018 06:25:36 -0500 Received: by mail-wr0-x244.google.com with SMTP id 16so18453057wry.12; Wed, 17 Jan 2018 03:25:35 -0800 (PST) Received: from 640k.lan (dynamic-adsl-78-12-229-84.clienti.tiscali.it. [78.12.229.84]) by smtp.gmail.com with ESMTPSA id w11sm2548965wrg.42.2018.01.17.03.25.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Jan 2018 03:25:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=QmURZG1y+gTB/C9JXVxccmDWFWmU2/nD/YEkTymeXgk=; b=pi7nNaKo3LarhfByeqckY1kRemBRxj4o3jBaSQdBDJDbpB5IGF/HPtX2htfo/KEx2n xtgvq7dJ2WkTmc053XFMJkJbhvkq/Vmb9KwCAyBt9gT5vK3QPx/F+Fk/wYNOasXSk41J EbYWe4KgTfJDlBqIsOsy4HT17I+Y3jDlc4jthgb0J6Yv5IoUIlDa8yZvj3keqbZ37iwk OEJtdH/5f5AeLfoTydZS8OP8k2A6KMkFzm36g3UXnBUAqr8mRsstkwF/145ae3iropeq A4n976IRGvAvsS/np3oplntGgzR94ca7lF9uq8Jjtcq2LNOsursDIVmG9PU9wzEYnlfT UWlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=QmURZG1y+gTB/C9JXVxccmDWFWmU2/nD/YEkTymeXgk=; b=led2FzmyRniex2XGihmASrEh6RBpLSqtlU1/PotvI9KD6mW8+INQjs19ayZkb4qbG0 Heyr7wb4+79M+Np6tRIHpm34VsKCf2AfY0sKI2RXe6An1o3KwtCWRfPaqNfPr34VdXss nL0e+41zGoeSM/3fZtiVmCknylUsmND9oRKZ+E8daBg5Etz1rmb3C4crl27Rno10sCua n9ib5N1d4T2ApGDDvm5T/z3lNygmYvr4AI+LnLmSjnZJLbKC7ynWPbNRESKSTyt61O97 w305KDX3qNoOnxFDTzrnmTmOymsFj87omUGTVKF/LMJOaWl4GtOuObYvcgXWR6ScEhcn EfSw== X-Gm-Message-State: AKwxytdUuzOsT6XiF+KsZxr662UFjo4yEOazDFiUGgb9YUr5dJi2EC/3 OL9XxKVGK8501Qc8mjVvbyQpcMTP X-Google-Smtp-Source: ACJfBovLp5WVihMDDg9v7laWS8WzzbfquIlFfRhaRHRG0lZe+7h8G3bn/ktVKgX3zZQqbXLfValKLQ== X-Received: by 10.223.163.205 with SMTP id m13mr2442816wrb.174.1516188334546; Wed, 17 Jan 2018 03:25:34 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Wed, 17 Jan 2018 12:25:11 +0100 Message-Id: <1516188312-29612-7-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1516188312-29612-1-git-send-email-pbonzini@redhat.com> References: <1516188312-29612-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::244 Subject: [Qemu-devel] [PATCH 6/7] qcow2: introduce qcow2_write_caches and qcow2_flush_caches 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: kwolf@redhat.com, qemu-block@nongnu.org, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Avoid recursively taking s->lock during bdrv_check. Signed-off-by: Paolo Bonzini --- block/qcow2-refcount.c | 28 ++++++++++++++++++++++++++++ block/qcow2.c | 20 ++++---------------- block/qcow2.h | 2 ++ 3 files changed, 34 insertions(+), 16 deletions(-) diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 3de1ab5..e0d9dc1 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -1172,7 +1172,35 @@ void qcow2_free_any_clusters(BlockDriverState *bs, u= int64_t l2_entry, } } =20 +int coroutine_fn qcow2_write_caches(BlockDriverState *bs) +{ + BDRVQcow2State *s =3D bs->opaque; + int ret; =20 + ret =3D qcow2_cache_write(bs, s->l2_table_cache); + if (ret < 0) { + return ret; + } + + if (qcow2_need_accurate_refcounts(s)) { + ret =3D qcow2_cache_write(bs, s->refcount_block_cache); + if (ret < 0) { + return ret; + } + } + + return 0; +} + +int coroutine_fn qcow2_flush_caches(BlockDriverState *bs) +{ + int ret =3D qcow2_write_caches(bs); + if (ret < 0) { + return ret; + } + + return bdrv_flush(bs->file->bs); +} =20 /*********************************************************/ /* snapshots and image creation */ diff --git a/block/qcow2.c b/block/qcow2.c index e886a44..4a10b55 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -492,7 +492,7 @@ static int qcow2_mark_clean(BlockDriverState *bs) =20 s->incompatible_features &=3D ~QCOW2_INCOMPAT_DIRTY; =20 - ret =3D bdrv_flush(bs); + ret =3D qcow2_flush_caches(bs); if (ret < 0) { return ret; } @@ -522,7 +522,7 @@ int qcow2_mark_consistent(BlockDriverState *bs) BDRVQcow2State *s =3D bs->opaque; =20 if (s->incompatible_features & QCOW2_INCOMPAT_CORRUPT) { - int ret =3D bdrv_flush(bs); + int ret =3D qcow2_flush_caches(bs); if (ret < 0) { return ret; } @@ -3653,22 +3653,10 @@ static coroutine_fn int qcow2_co_flush_to_os(BlockD= riverState *bs) int ret; =20 qemu_co_mutex_lock(&s->lock); - ret =3D qcow2_cache_write(bs, s->l2_table_cache); - if (ret < 0) { - qemu_co_mutex_unlock(&s->lock); - return ret; - } - - if (qcow2_need_accurate_refcounts(s)) { - ret =3D qcow2_cache_write(bs, s->refcount_block_cache); - if (ret < 0) { - qemu_co_mutex_unlock(&s->lock); - return ret; - } - } + ret =3D qcow2_write_caches(bs); qemu_co_mutex_unlock(&s->lock); =20 - return 0; + return ret; } =20 static BlockMeasureInfo *qcow2_measure(QemuOpts *opts, BlockDriverState *i= n_bs, diff --git a/block/qcow2.h b/block/qcow2.h index 46c8cf4..25b50f8 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -570,6 +570,8 @@ void qcow2_free_any_clusters(BlockDriverState *bs, uint= 64_t l2_entry, int qcow2_update_snapshot_refcount(BlockDriverState *bs, int64_t l1_table_offset, int l1_size, int addend); =20 +int coroutine_fn qcow2_flush_caches(BlockDriverState *bs); +int coroutine_fn qcow2_write_caches(BlockDriverState *bs); int qcow2_check_refcounts(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix); =20 --=20 1.8.3.1