From nobody Sat Feb 7 06:04:23 2026 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; 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; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1523879251443282.51418066503606; Mon, 16 Apr 2018 04:47:31 -0700 (PDT) Received: from localhost ([::1]:39873 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82bS-0007h9-3d for importer@patchew.org; Mon, 16 Apr 2018 07:47:22 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39791) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82YZ-0006AW-WF for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f82YU-0005kq-T7 for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:23 -0400 Received: from relay.sw.ru ([185.231.240.75]:58580) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f82YU-0005jo-IX; Mon, 16 Apr 2018 07:44:18 -0400 Received: from msk-vpn.virtuozzo.com ([195.214.232.6] helo=kvm.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1f82YR-0005Gy-H8; Mon, 16 Apr 2018 14:44:15 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Mon, 16 Apr 2018 14:44:08 +0300 Message-Id: <20180416114414.18406-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20180416114414.18406-1-vsementsov@virtuozzo.com> References: <20180416114414.18406-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 Subject: [Qemu-devel] [PATCH v2 1/7] block/dirty-bitmap: add lock to bdrv_enable/disable_dirty_bitmap 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, vsementsov@virtuozzo.com, famz@redhat.com, jsnow@redhat.com, armbru@redhat.com, mreitz@redhat.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Functions write to BdrvDirtyBitmap field, so the should take the lock. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: John Snow --- block/dirty-bitmap.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index 967159479d..6c00288fd7 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -445,15 +445,19 @@ void bdrv_remove_persistent_dirty_bitmap(BlockDriverS= tate *bs, /* Called with BQL taken. */ void bdrv_disable_dirty_bitmap(BdrvDirtyBitmap *bitmap) { + bdrv_dirty_bitmap_lock(bitmap); assert(!bdrv_dirty_bitmap_frozen(bitmap)); bitmap->disabled =3D true; + bdrv_dirty_bitmap_unlock(bitmap); } =20 /* Called with BQL taken. */ void bdrv_enable_dirty_bitmap(BdrvDirtyBitmap *bitmap) { + bdrv_dirty_bitmap_lock(bitmap); assert(!bdrv_dirty_bitmap_frozen(bitmap)); bitmap->disabled =3D false; + bdrv_dirty_bitmap_unlock(bitmap); } =20 BlockDirtyInfoList *bdrv_query_dirty_bitmaps(BlockDriverState *bs) --=20 2.11.1 From nobody Sat Feb 7 06:04:23 2026 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; 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; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1523879252222995.8095897367872; Mon, 16 Apr 2018 04:47:32 -0700 (PDT) Received: from localhost ([::1]:39875 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82bW-0007m8-RC for importer@patchew.org; Mon, 16 Apr 2018 07:47:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39792) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82Ya-0006AX-09 for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f82YU-0005kr-St for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:23 -0400 Received: from relay.sw.ru ([185.231.240.75]:58588) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f82YU-0005jl-IQ; Mon, 16 Apr 2018 07:44:18 -0400 Received: from msk-vpn.virtuozzo.com ([195.214.232.6] helo=kvm.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1f82YR-0005Gy-MF; Mon, 16 Apr 2018 14:44:15 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Mon, 16 Apr 2018 14:44:09 +0300 Message-Id: <20180416114414.18406-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20180416114414.18406-1-vsementsov@virtuozzo.com> References: <20180416114414.18406-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 Subject: [Qemu-devel] [PATCH v2 2/7] dirty-bitmaps: fix comment about dirty_bitmap_mutex 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, vsementsov@virtuozzo.com, famz@redhat.com, jsnow@redhat.com, armbru@redhat.com, mreitz@redhat.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Clarify first two cases and fix Modify -> Any access in third case. Also, drop 'only' from third case, as it a bit confuses, when thinking about case where we modify BdrvDirtyBitmap and access HBitmap. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: John Snow --- include/block/block_int.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/include/block/block_int.h b/include/block/block_int.h index c4dd1d4bb8..189666efa5 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -709,10 +709,14 @@ struct BlockDriverState { uint64_t write_threshold_offset; NotifierWithReturn write_threshold_notifier; =20 - /* Writing to the list requires the BQL _and_ the dirty_bitmap_mutex. - * Reading from the list can be done with either the BQL or the - * dirty_bitmap_mutex. Modifying a bitmap only requires - * dirty_bitmap_mutex. */ + /* Writing to the list (i.e. to any field of BdrvDirtyBitmap or to the + * list-head) requires both the BQL _and_ the dirty_bitmap_mutex. + * + * Reading from the list (from any field of BdrvDirtyBitmap or from the + * list-head) can be done with either the BQL or the dirty_bitmap_mute= x. + * + * Any access to underlying HBitmap requires dirty_bitmap_mutex. + */ QemuMutex dirty_bitmap_mutex; QLIST_HEAD(, BdrvDirtyBitmap) dirty_bitmaps; =20 --=20 2.11.1 From nobody Sat Feb 7 06:04:23 2026 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; 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; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1523879263154771.1675858143955; Mon, 16 Apr 2018 04:47:43 -0700 (PDT) Received: from localhost ([::1]:39876 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82bm-0007yM-9N for importer@patchew.org; Mon, 16 Apr 2018 07:47:42 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39800) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82Ya-0006Ab-21 for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f82YU-0005lE-VS for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:23 -0400 Received: from relay.sw.ru ([185.231.240.75]:58590) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f82YU-0005jm-IT; Mon, 16 Apr 2018 07:44:18 -0400 Received: from msk-vpn.virtuozzo.com ([195.214.232.6] helo=kvm.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1f82YR-0005Gy-Q1; Mon, 16 Apr 2018 14:44:15 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Mon, 16 Apr 2018 14:44:10 +0300 Message-Id: <20180416114414.18406-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20180416114414.18406-1-vsementsov@virtuozzo.com> References: <20180416114414.18406-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 Subject: [Qemu-devel] [PATCH v2 3/7] dirty-bitmap: remove missed bdrv_dirty_bitmap_get_autoload header 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, vsementsov@virtuozzo.com, famz@redhat.com, jsnow@redhat.com, armbru@redhat.com, mreitz@redhat.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: John Snow --- include/block/dirty-bitmap.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h index 1ff8949b1b..c7e910016d 100644 --- a/include/block/dirty-bitmap.h +++ b/include/block/dirty-bitmap.h @@ -88,7 +88,6 @@ int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap= ); void bdrv_dirty_bitmap_truncate(BlockDriverState *bs, int64_t bytes); bool bdrv_dirty_bitmap_readonly(const BdrvDirtyBitmap *bitmap); bool bdrv_has_readonly_bitmaps(BlockDriverState *bs); -bool bdrv_dirty_bitmap_get_autoload(const BdrvDirtyBitmap *bitmap); bool bdrv_dirty_bitmap_get_persistance(BdrvDirtyBitmap *bitmap); bool bdrv_dirty_bitmap_qmp_locked(BdrvDirtyBitmap *bitmap); bool bdrv_has_changed_persistent_bitmaps(BlockDriverState *bs); --=20 2.11.1 From nobody Sat Feb 7 06:04:23 2026 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; 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; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1523879429632701.070854504603; Mon, 16 Apr 2018 04:50:29 -0700 (PDT) Received: from localhost ([::1]:40023 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82eS-0001rF-R8 for importer@patchew.org; Mon, 16 Apr 2018 07:50:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39790) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82Ya-0006AV-05 for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f82YU-0005kx-TF for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:23 -0400 Received: from relay.sw.ru ([185.231.240.75]:58592) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f82YU-0005jp-IY; Mon, 16 Apr 2018 07:44:18 -0400 Received: from msk-vpn.virtuozzo.com ([195.214.232.6] helo=kvm.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1f82YR-0005Gy-VV; Mon, 16 Apr 2018 14:44:16 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Mon, 16 Apr 2018 14:44:11 +0300 Message-Id: <20180416114414.18406-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20180416114414.18406-1-vsementsov@virtuozzo.com> References: <20180416114414.18406-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 Subject: [Qemu-devel] [PATCH v2 4/7] dirty-bitmap: separate unused meta-bitmap related functions 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, vsementsov@virtuozzo.com, famz@redhat.com, jsnow@redhat.com, armbru@redhat.com, mreitz@redhat.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Separate them in the header and clarify needed locking in comments. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/dirty-bitmap.h | 14 +++++++++----- block/dirty-bitmap.c | 5 +++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/include/block/dirty-bitmap.h b/include/block/dirty-bitmap.h index c7e910016d..b7ccfd1363 100644 --- a/include/block/dirty-bitmap.h +++ b/include/block/dirty-bitmap.h @@ -9,9 +9,6 @@ BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverState = *bs, uint32_t granularity, const char *name, Error **errp); -void bdrv_create_meta_dirty_bitmap(BdrvDirtyBitmap *bitmap, - int chunk_size); -void bdrv_release_meta_dirty_bitmap(BdrvDirtyBitmap *bitmap); int bdrv_dirty_bitmap_create_successor(BlockDriverState *bs, BdrvDirtyBitmap *bitmap, Error **errp); @@ -45,7 +42,6 @@ void bdrv_set_dirty_bitmap(BdrvDirtyBitmap *bitmap, int64_t offset, int64_t bytes); void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap, int64_t offset, int64_t bytes); -BdrvDirtyBitmapIter *bdrv_dirty_meta_iter_new(BdrvDirtyBitmap *bitmap); BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitmap *bitmap); void bdrv_dirty_iter_free(BdrvDirtyBitmapIter *iter); =20 @@ -84,7 +80,6 @@ void bdrv_reset_dirty_bitmap_locked(BdrvDirtyBitmap *bitm= ap, int64_t bdrv_dirty_iter_next(BdrvDirtyBitmapIter *iter); void bdrv_set_dirty_iter(BdrvDirtyBitmapIter *hbi, int64_t offset); int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap); -int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap); void bdrv_dirty_bitmap_truncate(BlockDriverState *bs, int64_t bytes); bool bdrv_dirty_bitmap_readonly(const BdrvDirtyBitmap *bitmap); bool bdrv_has_readonly_bitmaps(BlockDriverState *bs); @@ -99,4 +94,13 @@ BdrvDirtyBitmap *bdrv_reclaim_dirty_bitmap_locked(BlockD= riverState *bs, BdrvDirtyBitmap *bitmap, Error **errp); =20 +/* + * Unused for now meta-bitmaps related functions + */ + +void bdrv_create_meta_dirty_bitmap(BdrvDirtyBitmap *bitmap, int chunk_size= ); +void bdrv_release_meta_dirty_bitmap(BdrvDirtyBitmap *bitmap); +BdrvDirtyBitmapIter *bdrv_dirty_meta_iter_new(BdrvDirtyBitmap *bitmap); +int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap); + #endif diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index 6c00288fd7..1812e17549 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -149,6 +149,8 @@ BdrvDirtyBitmap *bdrv_create_dirty_bitmap(BlockDriverSt= ate *bs, * @bitmap: the block dirty bitmap for which to create a meta dirty bitmap. * @chunk_size: how many bytes of bitmap data does each bit in the meta bi= tmap * track. + * + * Called with BQL taken. */ void bdrv_create_meta_dirty_bitmap(BdrvDirtyBitmap *bitmap, int chunk_size) @@ -160,6 +162,7 @@ void bdrv_create_meta_dirty_bitmap(BdrvDirtyBitmap *bit= map, qemu_mutex_unlock(bitmap->mutex); } =20 +/* Called with BQL taken. */ void bdrv_release_meta_dirty_bitmap(BdrvDirtyBitmap *bitmap) { assert(bitmap->meta); @@ -529,6 +532,7 @@ BdrvDirtyBitmapIter *bdrv_dirty_iter_new(BdrvDirtyBitma= p *bitmap) return iter; } =20 +/* Called with BQL and dirty_bitmap_mutex locked. */ BdrvDirtyBitmapIter *bdrv_dirty_meta_iter_new(BdrvDirtyBitmap *bitmap) { BdrvDirtyBitmapIter *iter =3D g_new(BdrvDirtyBitmapIter, 1); @@ -688,6 +692,7 @@ int64_t bdrv_get_dirty_count(BdrvDirtyBitmap *bitmap) return hbitmap_count(bitmap->bitmap); } =20 +/* Called with BQL or dirty_bitmap_mutex locked */ int64_t bdrv_get_meta_dirty_count(BdrvDirtyBitmap *bitmap) { return hbitmap_count(bitmap->meta); --=20 2.11.1 From nobody Sat Feb 7 06:04:23 2026 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; 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; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1523879565069905.9313398750616; Mon, 16 Apr 2018 04:52:45 -0700 (PDT) Received: from localhost ([::1]:40121 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82gY-0003dI-3u for importer@patchew.org; Mon, 16 Apr 2018 07:52:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39795) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82Ya-0006Aa-1C for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f82YU-0005ki-S3 for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:23 -0400 Received: from relay.sw.ru ([185.231.240.75]:58598) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f82YU-0005jq-II; Mon, 16 Apr 2018 07:44:18 -0400 Received: from msk-vpn.virtuozzo.com ([195.214.232.6] helo=kvm.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1f82YS-0005Gy-4c; Mon, 16 Apr 2018 14:44:16 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Mon, 16 Apr 2018 14:44:12 +0300 Message-Id: <20180416114414.18406-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20180416114414.18406-1-vsementsov@virtuozzo.com> References: <20180416114414.18406-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 Subject: [Qemu-devel] [PATCH v2 5/7] blockdev: refactor block-dirty-bitmap-clear transaction 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, vsementsov@virtuozzo.com, famz@redhat.com, jsnow@redhat.com, armbru@redhat.com, mreitz@redhat.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" bdrv_clear_dirty_bitmap do not fail, so we can call it in transaction commit, avoiding any rollback. After this, bdrv_undo_clear_dirty_bitmap() becomes unused, so, drop it. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/block_int.h | 1 - block/dirty-bitmap.c | 9 --------- blockdev.c | 16 +--------------- 3 files changed, 1 insertion(+), 25 deletions(-) diff --git a/include/block/block_int.h b/include/block/block_int.h index 189666efa5..22059c8119 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -1087,7 +1087,6 @@ bool blk_dev_is_medium_locked(BlockBackend *blk); void bdrv_set_dirty(BlockDriverState *bs, int64_t offset, int64_t bytes); =20 void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap, HBitmap **out); -void bdrv_undo_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap, HBitmap *in); =20 void bdrv_inc_in_flight(BlockDriverState *bs); void bdrv_dec_in_flight(BlockDriverState *bs); diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index 1812e17549..3c69a8eed9 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -607,15 +607,6 @@ void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap, = HBitmap **out) bdrv_dirty_bitmap_unlock(bitmap); } =20 -void bdrv_undo_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap, HBitmap *in) -{ - HBitmap *tmp =3D bitmap->bitmap; - assert(bdrv_dirty_bitmap_enabled(bitmap)); - assert(!bdrv_dirty_bitmap_readonly(bitmap)); - bitmap->bitmap =3D in; - hbitmap_free(tmp); -} - uint64_t bdrv_dirty_bitmap_serialization_size(const BdrvDirtyBitmap *bitma= p, uint64_t offset, uint64_t by= tes) { diff --git a/blockdev.c b/blockdev.c index c31bf3d98d..88eae60c1c 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2050,7 +2050,6 @@ typedef struct BlockDirtyBitmapState { BlkActionState common; BdrvDirtyBitmap *bitmap; BlockDriverState *bs; - HBitmap *backup; bool prepared; } BlockDirtyBitmapState; =20 @@ -2129,18 +2128,6 @@ static void block_dirty_bitmap_clear_prepare(BlkActi= onState *common, error_setg(errp, "Cannot clear a readonly bitmap"); return; } - - bdrv_clear_dirty_bitmap(state->bitmap, &state->backup); -} - -static void block_dirty_bitmap_clear_abort(BlkActionState *common) -{ - BlockDirtyBitmapState *state =3D DO_UPCAST(BlockDirtyBitmapState, - common, common); - - if (state->backup) { - bdrv_undo_clear_dirty_bitmap(state->bitmap, state->backup); - } } =20 static void block_dirty_bitmap_clear_commit(BlkActionState *common) @@ -2148,7 +2135,7 @@ static void block_dirty_bitmap_clear_commit(BlkAction= State *common) BlockDirtyBitmapState *state =3D DO_UPCAST(BlockDirtyBitmapState, common, common); =20 - hbitmap_free(state->backup); + bdrv_clear_dirty_bitmap(state->bitmap, NULL); } =20 static void abort_prepare(BlkActionState *common, Error **errp) @@ -2210,7 +2197,6 @@ static const BlkActionOps actions[] =3D { .instance_size =3D sizeof(BlockDirtyBitmapState), .prepare =3D block_dirty_bitmap_clear_prepare, .commit =3D block_dirty_bitmap_clear_commit, - .abort =3D block_dirty_bitmap_clear_abort, } }; =20 --=20 2.11.1 From nobody Sat Feb 7 06:04:23 2026 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; 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; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1523879423706401.1278986946902; Mon, 16 Apr 2018 04:50:23 -0700 (PDT) Received: from localhost ([::1]:40021 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82eM-0001nW-VF for importer@patchew.org; Mon, 16 Apr 2018 07:50:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39789) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82Ya-0006AU-07 for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f82YU-0005l8-Tm for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:23 -0400 Received: from relay.sw.ru ([185.231.240.75]:58604) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f82YU-0005jt-Id; Mon, 16 Apr 2018 07:44:18 -0400 Received: from msk-vpn.virtuozzo.com ([195.214.232.6] helo=kvm.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1f82YS-0005Gy-CO; Mon, 16 Apr 2018 14:44:16 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Mon, 16 Apr 2018 14:44:13 +0300 Message-Id: <20180416114414.18406-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20180416114414.18406-1-vsementsov@virtuozzo.com> References: <20180416114414.18406-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 Subject: [Qemu-devel] [PATCH v2 6/7] block/dirty-bitmap: bdrv_clear_dirty_bitmap: drop unused parameter 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, vsementsov@virtuozzo.com, famz@redhat.com, jsnow@redhat.com, armbru@redhat.com, mreitz@redhat.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Drop parameter "HBitmap **out" which is unused now, all callers set it to NULL. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/block_int.h | 2 +- block/dirty-bitmap.c | 14 +++++--------- blockdev.c | 4 ++-- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/include/block/block_int.h b/include/block/block_int.h index 22059c8119..61fac62c06 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -1086,7 +1086,7 @@ bool blk_dev_is_medium_locked(BlockBackend *blk); =20 void bdrv_set_dirty(BlockDriverState *bs, int64_t offset, int64_t bytes); =20 -void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap, HBitmap **out); +void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap); =20 void bdrv_inc_in_flight(BlockDriverState *bs); void bdrv_dec_in_flight(BlockDriverState *bs); diff --git a/block/dirty-bitmap.c b/block/dirty-bitmap.c index 3c69a8eed9..35600922f5 100644 --- a/block/dirty-bitmap.c +++ b/block/dirty-bitmap.c @@ -591,19 +591,15 @@ void bdrv_reset_dirty_bitmap(BdrvDirtyBitmap *bitmap, bdrv_dirty_bitmap_unlock(bitmap); } =20 -void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap, HBitmap **out) +void bdrv_clear_dirty_bitmap(BdrvDirtyBitmap *bitmap) { assert(bdrv_dirty_bitmap_enabled(bitmap)); assert(!bdrv_dirty_bitmap_readonly(bitmap)); + bdrv_dirty_bitmap_lock(bitmap); - if (!out) { - hbitmap_reset_all(bitmap->bitmap); - } else { - HBitmap *backup =3D bitmap->bitmap; - bitmap->bitmap =3D hbitmap_alloc(bitmap->size, - hbitmap_granularity(backup)); - *out =3D backup; - } + + hbitmap_reset_all(bitmap->bitmap); + bdrv_dirty_bitmap_unlock(bitmap); } =20 diff --git a/blockdev.c b/blockdev.c index 88eae60c1c..54e1ba8f44 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2135,7 +2135,7 @@ static void block_dirty_bitmap_clear_commit(BlkAction= State *common) BlockDirtyBitmapState *state =3D DO_UPCAST(BlockDirtyBitmapState, common, common); =20 - bdrv_clear_dirty_bitmap(state->bitmap, NULL); + bdrv_clear_dirty_bitmap(state->bitmap); } =20 static void abort_prepare(BlkActionState *common, Error **errp) @@ -2906,7 +2906,7 @@ void qmp_block_dirty_bitmap_clear(const char *node, c= onst char *name, return; } =20 - bdrv_clear_dirty_bitmap(bitmap, NULL); + bdrv_clear_dirty_bitmap(bitmap); } =20 BlockDirtyBitmapSha256 *qmp_x_debug_block_dirty_bitmap_sha256(const char *= node, --=20 2.11.1 From nobody Sat Feb 7 06:04:23 2026 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; 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; dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1523879565206870.6505444703697; Mon, 16 Apr 2018 04:52:45 -0700 (PDT) Received: from localhost ([::1]:40115 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82gV-0003aq-4b for importer@patchew.org; Mon, 16 Apr 2018 07:52:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39793) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f82Ya-0006AY-0V for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f82YU-0005ky-Sk for qemu-devel@nongnu.org; Mon, 16 Apr 2018 07:44:23 -0400 Received: from relay.sw.ru ([185.231.240.75]:58608) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f82YU-0005jy-Ib; Mon, 16 Apr 2018 07:44:18 -0400 Received: from msk-vpn.virtuozzo.com ([195.214.232.6] helo=kvm.sw.ru) by relay.sw.ru with esmtp (Exim 4.90_1) (envelope-from ) id 1f82YS-0005Gy-I1; Mon, 16 Apr 2018 14:44:16 +0300 From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Mon, 16 Apr 2018 14:44:14 +0300 Message-Id: <20180416114414.18406-8-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20180416114414.18406-1-vsementsov@virtuozzo.com> References: <20180416114414.18406-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 185.231.240.75 Subject: [Qemu-devel] [PATCH v2 7/7] blockdev: unify block-dirty-bitmap-clear command and transaction action 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, vsementsov@virtuozzo.com, famz@redhat.com, jsnow@redhat.com, armbru@redhat.com, mreitz@redhat.com, pbonzini@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" - use error messages from qmp command, as they are more descriptive - we need not check bs, as block_dirty_bitmap_lookup never returns bs =3D NULL on success (and if user set bs to be not NULL pointer), so, let's just assert it. Signed-off-by: Vladimir Sementsov-Ogievskiy --- blockdev.c | 53 +++++++++++++++++++++-------------------------------- 1 file changed, 21 insertions(+), 32 deletions(-) diff --git a/blockdev.c b/blockdev.c index 54e1ba8f44..3f0979298e 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2114,18 +2114,26 @@ static void block_dirty_bitmap_clear_prepare(BlkAct= ionState *common, if (!state->bitmap) { return; } + assert(state->bs !=3D NULL); =20 if (bdrv_dirty_bitmap_frozen(state->bitmap)) { - error_setg(errp, "Cannot modify a frozen bitmap"); + error_setg(errp, + "Bitmap '%s' is currently frozen and cannot be modified= ", + action->name); return; } else if (bdrv_dirty_bitmap_qmp_locked(state->bitmap)) { - error_setg(errp, "Cannot modify a locked bitmap"); + error_setg(errp, + "Bitmap '%s' is currently locked and cannot be modified= ", + action->name); return; } else if (!bdrv_dirty_bitmap_enabled(state->bitmap)) { - error_setg(errp, "Cannot clear a disabled bitmap"); + error_setg(errp, + "Bitmap '%s' is currently disabled and cannot be cleare= d", + action->name); return; } else if (bdrv_dirty_bitmap_readonly(state->bitmap)) { - error_setg(errp, "Cannot clear a readonly bitmap"); + error_setg(errp, "Bitmap '%s' is readonly and cannot be cleared", + action->name); return; } } @@ -2878,35 +2886,16 @@ void qmp_block_dirty_bitmap_remove(const char *node= , const char *name, void qmp_block_dirty_bitmap_clear(const char *node, const char *name, Error **errp) { - BdrvDirtyBitmap *bitmap; - BlockDriverState *bs; - - bitmap =3D block_dirty_bitmap_lookup(node, name, &bs, errp); - if (!bitmap || !bs) { - return; - } - - if (bdrv_dirty_bitmap_frozen(bitmap)) { - error_setg(errp, - "Bitmap '%s' is currently frozen and cannot be modified= ", - name); - return; - } else if (bdrv_dirty_bitmap_qmp_locked(bitmap)) { - error_setg(errp, - "Bitmap '%s' is currently locked and cannot be modified= ", - name); - return; - } else if (!bdrv_dirty_bitmap_enabled(bitmap)) { - error_setg(errp, - "Bitmap '%s' is currently disabled and cannot be cleare= d", - name); - return; - } else if (bdrv_dirty_bitmap_readonly(bitmap)) { - error_setg(errp, "Bitmap '%s' is readonly and cannot be cleared", = name); - return; - } + BlockDirtyBitmap data =3D { + .node =3D (char *)node, + .name =3D (char *)name + }; + TransactionAction action =3D { + .type =3D TRANSACTION_ACTION_KIND_BLOCK_DIRTY_BITMAP_CLEAR, + .u.block_dirty_bitmap_clear.data =3D &data, + }; =20 - bdrv_clear_dirty_bitmap(bitmap); + blockdev_do_action(&action, errp); } =20 BlockDirtyBitmapSha256 *qmp_x_debug_block_dirty_bitmap_sha256(const char *= node, --=20 2.11.1