From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 27119802A5 for ; Sat, 10 Oct 2026 12:48:11 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69ACkvdO021938; Sat, 10 Oct 2026 15:46:58 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69ACkvdO021938 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="Thchsr7o" Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69ACkoYd021917 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Sat, 10 Oct 2026 15:46:50 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69ACkoYd021917 Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-48afcecb035so32516f8f.0 for ; Sat, 10 Oct 2026 05:46:50 -0700 (PDT) X-Forwarded-Encrypted: i=2; AKwUvBwb4QV1hsqiKr1Md7AY7tWNnVXsbRyR5Z1QlKouFoDDjeCXxLNvD8NnSj3MkQn2ENWE1U7BEg==@openvz.org X-Gm-Message-State: AFq9FYImbqooRgOWNPi+bKMBceOtiDEkZxu3f7A7t89IIfC1Xuuqw1KK V0U2BWtq20IXocJCa/o5mGDiEh4gA4lhjcS8Q1z5ZO1mTbYd0PMPnMxVzuS7yDhybBQ+fIGmpOs Vd5grEPHcYi4T2NbT404dnbDW27UcXUP9hdJdeqZSfpfgzwQ8rw7uXA== X-Gm-Gg: AYBFou0FsxCP+/EhXmnbZDPkYY4ZE4bhYtfiVKhHoQbkBwRUmbv17EpIX8BMVomHla3 p9nI0jA4aKnW09LDiGzi7+PfkZoGZkYfSrVFhN8vd949ZmzC6gdFqveCW2loAobq/Z72OiQy/4h RadeaBySNuQVCM50vq3iP7f0UjXqnbRToLjRp6PAMhsrusjlNuipMuWy1dPhEntLG8RMhhpSccJ ZxTA6vFQN5QdOgDTr4jRm3ZhKDDGx4TKLkQ1lWINffd2/MfYHZk1A3J5aUBtLOUxCmrDEdJYHjh Vl1mgceKz0XpCW0G0kZYU26WJUSGLHCzDEyOuGPQB+y48kI/2R6t6D7PiIvUZnvEsvUwsU9le1W /JojNb8ZZl3uxeITw+hnSuXHXxAfd X-Received: by 2002:a05:6000:2002:b0:48b:f1f:8b12 with SMTP id ffacd0b85a97d-48db9465e7dmr9908987f8f.9.1791636409861; Sat, 10 Oct 2026 05:46:49 -0700 (PDT) X-Received: by 2002:a05:6000:2002:b0:48b:f1f:8b12 with SMTP id ffacd0b85a97d-48db9465e7dmr9908948f8f.9.1791636409138; Sat, 10 Oct 2026 05:46:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1791636409; cv=none; d=google.com; s=arc-20260327; b=GC4wKk+KIdFbYIB6HwqOoRq8N+AX7XA3W3fuyw2yv6VKe58e8nnV0ql2QK4J0ewumy GTjHD1PmQge4Ob/OEW49WMMaa2xKfNeGRE3hg0W1TUMDTQT0jT7588B1vi3u/H5qW7iL PVdNj2PUZQfhETFJyF6zLOzLpv1cf71BTQ4lVqYLfzKhHhWNyjTZbA+1ujOISdNLSQTJ gkZcztlSlT+ztgo/XfpGPdhgF2NH2ebGMos4Ch1VQ2wN5KP57zb8ou4gtYB9+as40/aH 8/hFqzg23pChrkGTNFZtwqAxtTlxhdojjvoT51AvScvazoCa0ZervY4xZzRbGa7n2GVz Sd8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=hDq9zp687/I2Syp99KQMNnTYRg66WPIcpn9C5zrWSqc=; fh=jiFD8gjZllyls1UFJ+1kA4uyOnjRU7bVpV3P+S6CTV8=; b=kMpFWYAXWsv/XKE/ZbWt0/WGCmSlCsDwvKCCPicxh7KmZqG8OkbAwDOkIZOmLtr5PL /o7WHl3Nm2HzAwf9hZX0nCMgXXwa0L1zc2XdOeR2fSrMg3ofBVnfyLezQXwMrjCwl0sr oTd5l0oCMQMDuif9uY8MikFFrFihk/l5yQx+ahuI93chB7sB5rQfSnpHYeO73eshW/ip w6LSE+0RapVQKmsB1SbdpWhf7vLnmbG/VLqXNDcfKUQ9oFghVUNwcvGKcmG7Kl1PEZxE xZAp+aVWX2xMbwf/X96wB+rueHHyz0Vn/3zQMYCsmjtjP9h7GPnxWOonrhyEPsOwBNlJ AgJw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=Thchsr7o; spf=pass (google.com: domain of alexander.ivanov@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=alexander.ivanov@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from relay.virtuozzo.com (relay.virtuozzo.com. [130.117.225.111]) by mx.google.com with ESMTPS id ffacd0b85a97d-48db9af2e91si9297749f8f.372.2026.10.10.05.46.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Oct 2026 05:46:49 -0700 (PDT) Received-SPF: pass (google.com: domain of alexander.ivanov@virtuozzo.com designates 130.117.225.111 as permitted sender) client-ip=130.117.225.111; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=Thchsr7o; spf=pass (google.com: domain of alexander.ivanov@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=alexander.ivanov@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=MIME-Version:Message-ID:Date:Subject:From: Content-Type; bh=hDq9zp687/I2Syp99KQMNnTYRg66WPIcpn9C5zrWSqc=; b=Thchsr7onNuM 9gYS/GLfXfkTvV8OEZ/qk/BtBa0S8iw1r7oIHiInlK7nVmwcJPGuHIhZZOFWtrQvK+/SHqe+Xat5u ry1NX35bLSaJ6+gp3NBNAs0hDV6jZCbSr/vgxsQeG6rL7eI1UX4J9mocafUTWD6/Ces9Yb/8m6SUK Ztf/fppUIEJIGnIAWZvEelBzxrejBvZTITWbcFWQEuVAbzifxOe2PLlyqCxngiGAUh/kFN8lwSr55 W7egFv0cbFrfSn+zTHjw9hfhYpoj9NAqtVx04VAfS+VDnydWs61ZhlubMCZFojKf+ZQeSnIUety/b Li1ZaBKMSY5jAw1s5U32Eg==; Received: from ch-vpn.virtuozzo.com ([130.117.225.6] helo=sky) by relay.virtuozzo.com with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1xFWQ5-00G6FQ-2e; Sat, 10 Oct 2026 14:46:43 +0200 From: Alexander Ivanov To: den@openvz.org Date: Sat, 10 Oct 2026 14:46:40 +0200 Message-ID: <20261010124642.927044-2-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20261010124642.927044-1-alexander.ivanov@virtuozzo.com> References: <20261010124642.927044-1-alexander.ivanov@virtuozzo.com> MIME-Version: 1.0 X-OZ-Fwd: true Cc: devel@openvz.org Subject: [Devel] [PATCH hci-8.1 v5 1/3] dm-qcow2: add qcow2_md_page_read_sync() helper X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org Add a helper, which returns an up to date md page from md cache, or allocates a new one, inserts it and reads it synchronously. On read failure the page is erased from cache and freed. Use it in qcow2_parse_header() instead of open-coded allocation and read of page 0. It will also be used by the next patch. https://virtuozzo.atlassian.net/browse/VSTOR-148171 Feature: dm-qcow2: block device over QCOW2 files driver Signed-off-by: Alexander Ivanov Reviewed-by: Denis V. Lunev --- drivers/md/dm-qcow2-target.c | 41 +++++++++++++++++++++++++++++++----- drivers/md/dm-qcow2.h | 2 ++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/drivers/md/dm-qcow2-target.c b/drivers/md/dm-qcow2-target.c index be09615eb8e2..311a23d63a5c 100644 --- a/drivers/md/dm-qcow2-target.c +++ b/drivers/md/dm-qcow2-target.c @@ -418,6 +418,41 @@ int qcow2_alloc_and_insert_md_page(struct qcow2 *qcow2, u64 index, struct md_pag } ALLOW_ERROR_INJECTION(qcow2_alloc_and_insert_md_page, ERRNO); +/* + * Returns up to date md page from cache, or allocates + * a new one and reads it synchronously. + * + * The caller must ensure no read of this page is in flight + * (e.g., the device is suspended): if the page is cached but + * not MD_UPTODATE yet, qcow2_md_page_find_or_postpone() returns + * NULL and the following insert fails. + */ +int qcow2_md_page_read_sync(struct qcow2 *qcow2, u64 id, struct md_page **md) +{ + int ret; + + spin_lock_irq(&qcow2->md_pages_lock); + *md = qcow2_md_page_find_or_postpone(qcow2, id, NULL); + spin_unlock_irq(&qcow2->md_pages_lock); + if (*md) + return 0; + + ret = qcow2_alloc_and_insert_md_page(qcow2, id, md); + if (ret) + return ret; + + ret = qcow2_rw_page_sync(READ, qcow2, id, (*md)->page); + spin_lock_irq(&qcow2->md_pages_lock); + if (ret) + qcow2_md_page_erase(qcow2, *md); + else + (*md)->status |= MD_UPTODATE; + spin_unlock_irq(&qcow2->md_pages_lock); + if (ret) + qcow2_free_md_page(*md); + return ret; +} + static void inflight_ref_exit0(struct percpu_ref *ref) { struct qcow2_target *tgt = container_of(ref, struct qcow2_target, @@ -851,13 +886,9 @@ static int qcow2_parse_header(struct dm_target *ti, struct qcow2 *qcow2, } qcow2->file_preallocated_area_start = qcow2->file_size; - ret = qcow2_alloc_and_insert_md_page(qcow2, 0, &md); - if (ret) - return ret; - ret = qcow2_rw_page_sync(READ, qcow2, md->id, md->page); + ret = qcow2_md_page_read_sync(qcow2, 0, &md); if (ret) return ret; - md->status |= MD_UPTODATE; raw_hdr = kmap(md->page); min_len = to_bytes(ti->len); diff --git a/drivers/md/dm-qcow2.h b/drivers/md/dm-qcow2.h index d9b8c38e093f..69d3ae6fca8a 100644 --- a/drivers/md/dm-qcow2.h +++ b/drivers/md/dm-qcow2.h @@ -386,6 +386,8 @@ void do_qcow2_work(struct work_struct *ws); void do_qcow2_fsync_work(struct work_struct *ws); int qcow2_alloc_and_insert_md_page(struct qcow2 *qcow2, u64 index, struct md_page **md); +int qcow2_md_page_read_sync(struct qcow2 *qcow2, u64 id, + struct md_page **md); struct md_page *qcow2_md_page_find_or_postpone(struct qcow2 *qcow2, u64 id, struct qio **qio); struct md_page *qcow2_md_page_renumber(struct qcow2 *qcow2, u64 id, -- 2.53.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel