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 B7DF780266 for ; Fri, 28 Aug 2026 17:05:15 +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 67SH40x5011563; Fri, 28 Aug 2026 20:04:01 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 67SH40x5011563 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="M3m3DCis" Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 67SH3qIE011513 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Fri, 28 Aug 2026 20:03:52 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 67SH3qIE011513 Received: by mail-wr1-f71.google.com with SMTP id ffacd0b85a97d-482ea386bf6so631049f8f.1 for ; Fri, 28 Aug 2026 10:03:52 -0700 (PDT) X-Gm-Message-State: AFuF++kVAreuhhbDqRfl+bFlCp56P3dGbvuhk+cFry6J6IcFp30x/AlI Vhbk59fqB1aRrKqOyZmzN5eo8ZdzYZK1VoyQI+NSYJYBRQavTUKT/nUXlnYGE+59cvtqBV45Kth rH/bes0j0vq7cTeAYQWRNDvuJ2BgJl27RkcGfmXsqNo6HO+O60fQDow== X-Gm-Gg: AR+sD121oOS6irTGjBw8OJjsOByAO0qdIxM46DeEYmvHtgTHagdGguDnp52CXpQ8Cd6 AgzIc8Sv93E70fLvCOTZ4kTyhUWMJYAYBiv27m5dusQig+Ehu/B93ZYkBEQtIJt//4kUBvo4bfW o71qjvLbRuBwhz/6We8cw8PmKVnvZbICtG4csbmq9IwNWpPEOpjP/zsBcAbrI4HjRPW6S7JjVAT f/tXR1KTtp0F3t8bIV1SVjeYMOoEOjzqI6CVWH0YzbfaLT8+w9csopZATAsKjAVcWCYX+4RCN/P Yy4lnIQWAGgOcwk7ENrtfmlLGXTqXo6rTmGR92zXl8X/dbIxBLWh7Y84+Bwx8xPuFEZYjhQtzyk eyS8gi5sE/TpiWV5L X-Received: by 2002:a05:6000:987:b0:47d:ee9d:90c8 with SMTP id ffacd0b85a97d-482f7976060mr14021130f8f.3.1787936632055; Fri, 28 Aug 2026 10:03:52 -0700 (PDT) X-Received: by 2002:a05:6000:987:b0:47d:ee9d:90c8 with SMTP id ffacd0b85a97d-482f7976060mr14021014f8f.3.1787936631480; Fri, 28 Aug 2026 10:03:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1787936631; cv=none; d=google.com; s=arc-20260327; b=n69ISfxGOi0XO5prt/q5EayWHUL5lM37axT7123CatEy68ECBoHf2ZE81kf4bj3yA1 3yGvv4OizTBnCbdLz9w3BdtJ0YgRarevBn5iEqDd8RG3SAfTB45sCpzZVnVr9Kc4r2Xq byqi1fzr6zMV+pJ28rn5/QrkYho8ddKhQNrv9tsuvuqex2oOyzAGWAocWyfHKcBrtF8X e3lrUjmYl9P2MD/43DwAAjEM2Gy/Ten4U+74otO775F+9rduWpKVY8sO2886mElKd7+S s9Llw2h4CPT4gq9PlDyeMlohsLCqQFA5hR81p0tHTnf2clmn+ln03BJymQq11T1dhnIn QqJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=subject:in-reply-to:cc:to:from:message-id:date:dkim-signature; bh=hedpVCAFb2imdu9YZxAQpb7+NyYTBYXtdAYAf148ZCo=; fh=Vum9jOrhj7HN5ByxRUgrKjNRrylYGqSqAPC0VlAu4Lc=; b=cy5uvQtBpmwVFuQ2lP5QYm1pa2BibudYzit3qPMOrwgRmfNYqAQkuq5hW0JUy2q4fK T23Gk2ULzgZ+liMf2FYgIW9tuKkIi1Qme3VAuFvHy0Xpq5MwRat+4kN7AQ+iNJ2sjklY RQ4oSHVNkKtuW+Jz9G2GOrxuzboTsgZCfyzpkOzs8oKHBeK0l++utOhW3HWa98u9KLY0 jvjzYxgvLXUYvhdUQR1CNwhMzltuTUtqLcHy4Paiq3sCVyIxjAME2g7s4wqtaRB1qNlS 6dgv9uiIOn7b6sMLHxo6I3tb6ZymN2VGbZ1saCwhnH4EgOibBWwXKDtn1vwvMvo+7KsB IgjA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=M3m3DCis; spf=pass (google.com: domain of khorenko@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=khorenko@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-482fbb2881esi3841383f8f.144.2026.08.28.10.03.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Aug 2026 10:03:51 -0700 (PDT) Received-SPF: pass (google.com: domain of khorenko@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=M3m3DCis; spf=pass (google.com: domain of khorenko@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=khorenko@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=Subject:From:Message-Id:Date:Content-Type: MIME-Version; bh=hedpVCAFb2imdu9YZxAQpb7+NyYTBYXtdAYAf148ZCo=; b=M3m3DCis/9wY q1MMmkuRO5FHV2Qw8ci2MKCfyAHCYVgSb6MAKrlHaZ3HDrFGMPIZxjokwg+cEKI0XBwmAie8Wq/q6 XTlN3gskswQvwQaRLSnaOXCR9KToy0CfbaivKs03srAiyNrwhx0P/J7sZIYBF8coJxWBXWyrpiTYV ncVJrpPhcIp0/zOvlOtv5CBcQXVGDFoD+P+TKfkLs4AS3DjGqUirfw9BL8hOHNKxyJZU40vDIWi95 8Jraxx7Ows7iTxxuEOlh7v9DoLUXuPaXdpKVni2ugqfuMx/6aCEs9S2NFvr7WkhLbpUUn6yUN/6OK uRGjMe2Y40p3FE7S3Vc01w==; Received: from ch-demo-asa.virtuozzo.com ([130.117.225.8] helo=f0.sw.ru) by relay.virtuozzo.com with esmtps (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wzzxJ-008dtt-18; Fri, 28 Aug 2026 19:03:47 +0200 Received: from f0.sw.ru (localhost [127.0.0.1]) by f0.sw.ru (8.18.1/8.18.1/Debian-2) with ESMTP id 67SH3npK1063989; Fri, 28 Aug 2026 19:03:49 +0200 Received: (from kostja@localhost) by f0.sw.ru (8.18.1/8.18.1/Submit) id 67SH3nrj1063988; Fri, 28 Aug 2026 19:03:49 +0200 Date: Fri, 28 Aug 2026 19:03:49 +0200 Message-Id: <202608281703.67SH3nrj1063988@f0.sw.ru> X-Authentication-Warning: f0.sw.ru: kostja set sender to khorenko@virtuozzo.com using -f From: Konstantin Khorenko To: Andrey Zhadchenko In-Reply-to: <20260827160619.303398-10-andrey.zhadchenko@virtuozzo.com> X-OZ-Fwd: true Cc: OpenVZ devel Subject: Re: [Devel] [PATCH RHEL10 COMMIT] drivers/md/dm-qcow2: allow shared L1 entries during merge from RO image 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: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org The commit is pushed to "branch-rh10-6.12.0-211.39.1.16.x.vz10-ovz" and will appear at git@bitbucket.org:openvz/vzkernel.git after rh10-6.12.0-211.39.1.16.11.vz10 ------> commit 08f42e9ddb46a95e8cf467d93248fb985e55b9b8 Author: Andrey Zhadchenko Date: Thu Aug 27 19:06:17 2026 +0300 drivers/md/dm-qcow2: allow shared L1 entries during merge from RO image For RO images with internal snapshots L1 entries are shared. Write-mode metadata parsing stops at such entries to avoid modifying a shared L2 table, which made prepare_backward_merge() see the cluster as unallocated and skip it with "nothing to merge": the merged result would silently lose all data under shared L1 entries. Allow such scenario in parse_l1() and ease WARN in prepare_backward_merge(). https://virtuozzo.atlassian.net/browse/VSTOR-138288 Feature: dm-qcow2: block device over QCOW2 files driver Signed-off-by: Andrey Zhadchenko Reviewed-by: Pavel Tikhomirov Reviewed-by: Vasileios Almpanis Reviewed-by: Konstantin Khorenko --- drivers/md/dm-qcow2-map.c | 18 ++++++++++++++++-- drivers/md/dm-qcow2.h | 5 +++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/drivers/md/dm-qcow2-map.c b/drivers/md/dm-qcow2-map.c index 3154cae955916..c5a79a51942ae 100644 --- a/drivers/md/dm-qcow2-map.c +++ b/drivers/md/dm-qcow2-map.c @@ -1726,6 +1726,14 @@ static bool qio_is_fully_alloced(struct qcow2 *qcow2, struct qio *qio, return !(subclus_mask & ~alloced_mask); } +static bool qio_may_modify_image(struct qcow2 *qcow2, struct qio *qio) +{ + if (qcow2_file_is_writable(qcow2)) + return true; + + return !fake_merge_qio(qio); +} + static loff_t parse_l1(struct qcow2 *qcow2, struct qcow2_map *map, struct qio **qio, bool write) @@ -1762,7 +1770,8 @@ static loff_t parse_l1(struct qcow2 *qcow2, struct qcow2_map *map, goto out; if (delay_if_dirty(qcow2, l1->md, l1->index_in_page, qio)) goto out; - if (write && map->clu_is_cow) + /* Don't refuse L1 parse for merge qios with readonly disks */ + if (write && map->clu_is_cow && qio_may_modify_image(qcow2, *qio)) goto out; /* Avoid to return pos */ ret = pos; @@ -2061,6 +2070,10 @@ static int parse_metadata(struct qcow2 *qcow2, struct qio **qio, qio_discard_unmaps_cluster(qcow2, *qio, map))) return 0; + /* Don't need refcount table if we don't modify the image */ + if (!qio_may_modify_image(qcow2, *qio)) + return 0; + /* Now refcounters table/block */ ret = qcow2_handle_r1r2_maps(qcow2, pos, qio, &map->r1, &map->r2, map->compressed); @@ -2732,7 +2745,8 @@ static int prepare_backward_merge(struct qcow2 *qcow2, struct qio **qio, int ret; if (!map->data_clu_alloced) { - WARN_ON_ONCE(map->clu_is_cow); /* Strange COW at L1 */ + /* Strange COW at L1, except the merge from RO image */ + WARN_ON_ONCE(map->clu_is_cow && qio_may_modify_image(qcow2, *qio)); if (fake_merge_qio(*qio)) { /* Nothing is to merge */ goto endio; diff --git a/drivers/md/dm-qcow2.h b/drivers/md/dm-qcow2.h index 0f006f1ae48cc..d9b8c38e093f5 100644 --- a/drivers/md/dm-qcow2.h +++ b/drivers/md/dm-qcow2.h @@ -460,6 +460,11 @@ static inline bool qcow2_wants_check(struct qcow2_target *tgt) return !!(tgt->md_writeback_error|tgt->truncate_error); } +static inline bool qcow2_file_is_writable(struct qcow2 *qcow2) +{ + return qcow2->file->f_mode & FMODE_WRITE; +} + static inline void remap_to_clu(struct qcow2 *qcow2, struct qio *qio, loff_t clu_pos) { qio->bi_iter.bi_sector &= (to_sector(qcow2->clu_size) - 1); _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel