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 93C4C80726 for ; Tue, 13 Oct 2026 11:17:29 +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 69DBGBui012443; Tue, 13 Oct 2026 14:16:12 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69DBGBui012443 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="Qdr1DuOx" Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69DBGACW012433 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Tue, 13 Oct 2026 14:16:10 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69DBGACW012433 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4a01c621dc2so22264885e9.2 for ; Tue, 13 Oct 2026 04:16:10 -0700 (PDT) X-Gm-Message-State: AFq9FYJ7YmnPFv2KRydZxOLtQWCXdhimGdizr5GJP9eh4nuiDElz3gXi CEGn8fbTux/sJJ/xoHpwnbeexHdLyH1gFmmX1sFcGB/dG13Pl8anApo3MZkwAMLEkxTzu9LHQWY pMBaY3KCqi8r63Cu5eegkqgHo46VIHduNaQ5ik2N/ZPyCJREuz6Vqig== X-Gm-Gg: AYBFou0TLl6l6C1r0imusT17QBpvDEngg+GI4XogVWVLJpKayU4c5dXFsmB+FEABTg8 oWIUhqnUVCGdZbVtFRj6FopuaoEoneMj3AQqEC0kGdjLBVRtHjCXkQHjYX5+wURhPq+wYPF4JCW 9yxqQTwyv9Vz7LmBbXTKzNwh7a2f8Fthx9rZpFseRA/G9bFXxf4kPB/6PKIy9mpLAx8X1tNsdE5 WbM4zWInkTOQ9XuF8Ya4jupd6uU3hNeHGh9zyzYbxul4SI4gKO7itloP0R8PBfKJPTfpApUESl1 nqxgBoFzt2mpNJqK2XxZ5F8S1Haam3TdWlSZtyNgzsxnl3trCM4qVoozyTZlbcpZ8ljjFkCRm43 seYmkp2VXkurelmufat6+UanXqwv2 X-Received: by 2002:a05:600c:3494:b0:49c:fa20:cc00 with SMTP id 5b1f17b1804b1-4a18e4c3f24mr239800965e9.23.1791890170063; Tue, 13 Oct 2026 04:16:10 -0700 (PDT) X-Received: by 2002:a05:600c:3494:b0:49c:fa20:cc00 with SMTP id 5b1f17b1804b1-4a18e4c3f24mr239799875e9.23.1791890169323; Tue, 13 Oct 2026 04:16:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1791890169; cv=none; d=google.com; s=arc-20260327; b=Bhz0f46B2742SsRV9QIwGagGt7SIJSnmN1nDT7/xv3LDnz2YrjUmNr7FIcqel2WLb3 s+IlhfDIBwhB3NhDo/7VGuTv5y9XB/wFOhP4hiwGRe4O6Rwh6wCA3e3lFZYNFXxNCM3y wHkvlRZ7mYhMNzjSgbmwKgcOU4a71y3I5o9QIxfrFC0yYGOzVHBgapZhgv8totufyfV9 enqGyc08OPXk6MiAGuR3Ms1Nc00PmuuV3W04XKMqUBpDC7Mn5GYvXlAL/5HQpWO2sJ0l svPaOxaOfITTKsGx55ikiBCxk+1DNqd4MOiOQX3A2zugERLtWyroLWXONn1/DiyPaKeY GFRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature; bh=3xt7Uh3kN3smsW3K+8hY3oevvrRaz68lChG34z5jl5g=; fh=M+TyAUhAp4+t7uzAVeqNdLHW5eNz2FQXSv4TjrRhpCk=; b=YYR+a0o91IUApxHyLycYXMeiEah6xSHiuErqwrKueY7gnUblopAXIgex26RCUW9/xZ dE6jyc/CW99NykH+Sy05XTgwxCYdquEKDwITNHvZcwgh5qvXqZMGNgsECwPwfcQ4+yqT FeXd8T0VEh7ewo7Z1pATOyMaZCieMNNVUsTHJR1Csfw7vZ2kEcGSAgzyY12ds9MUBwU6 Y4kdCAwe+GbqgQRZK2RBb4eK1zRGzkbZbL0JmYemVymn8eOIqc7IV+/EUVgykXXQEbDS 9vSSHqD8FFzQsa4mTsKfsJqR9eUd0NOFXoqga2gHjGX7pNrYw+8XwclDkknRPLaucd+e Tn4A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=Qdr1DuOx; 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-48de0ac7ea5si4924294f8f.82.2026.10.13.04.16.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Oct 2026 04:16:09 -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=Qdr1DuOx; 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=3xt7Uh3kN3smsW3K+8hY3oevvrRaz68lChG34z5jl5g=; b=Qdr1DuOxcieN KHySmQ3wbWSGu2xVbrx/qAkRq5m8oSzJKgJEGPpxouaKtiduUrJVwsWnaAlx1CRHlEfaLRQBDFupU Z8yma2OH92EfQ6BQHH8ppfMrKrEgWHoiOh6wOLHUf8Ux2Oh6tk4NrFxdYShiLtB3pRMtc4z1on+S/ HlVrD3ZmblVA7O5Ku3T84ZKB7VeVLBZxL1TfQhFnB1X0+mDqm4lASIyWRm+BwXvmVELYU6tJ0pyg7 wjxXlIl1ELOHh/KCDEksHB5baFgyr5KuSw8rEp4TZqu8jGyIsxZeyzRrp20fRtTnA5Ii0yqNUu2og YDkSHFkh9iyI3tIr7qTvbA==; 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 1xGaQv-008pMQ-12; Tue, 13 Oct 2026 13:15:58 +0200 From: Alexander Ivanov To: den@openvz.org Date: Tue, 13 Oct 2026 13:15:52 +0200 Message-ID: <20261013111604.142989-1-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.53.0 MIME-Version: 1.0 X-OZ-Fwd: true Cc: devel@openvz.org Subject: [Devel] [PATCH hci-8.1 v6 00/12] dm-ploop: give back unused tail of top delta on suspend 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 Preallocated space and clusters at the end of the top delta freed by discard are never given back, so the image file never shrinks. The last patch truncates the top delta to the end of its last used cluster on suspend. The next resumed ploop must see the new file size, so the previous patch reloads all the metadata (header, BAT, file sizes) on resume. This also fixes "dmsetup reload", after which the new ploop worked with metadata read in ploop_ctr() while the old one kept changing images. Patches 1-5 fix header validation and a lost wakeup in the allocator, which the reload would otherwise hit. Patches 6-9 prepare the reload and fix races on md pages and inflight_md that the new waits on suspend expose. Patch 10 fixes flip_upper_deltas racing with resume in ploop_preresume(), where the reload goes. The corresponding ploop userspace changes: https://bitbucket.org/openvz/ploop.ovz/pull-requests/486 https://virtuozzo.atlassian.net/browse/VSTOR-148171 v6: - Patch 10: new. Clear ->suspended in ploop_preresume() under the same ctl_rwsem as the noresume check, so that flip_upper_deltas can't pass its check between them. - Patch 11 (was 10): rebase on patch 10; mark a new ploop suspended in ploop_ctr(), as it is not live until the first successful resume. - Patch 12 (was 11): fsync the top delta before the truncation, as BAT writeback finished after ploop_presuspend() is not durable yet; drop ploop_set_suspended(), which is unused now. v5: - Patch 9: in ploop_destroy(), wait for inflight_md with wait_event() and then take and drop inflight_md_wq.lock to wait for ploop_dec_inflight_md() to release it, instead of waiting with wait_event_lock_irq() under the lock. Reword the comment of ploop_dec_inflight_md() and the commit message accordingly. v4: - Patch 1: was sent separately as "[PATCH hci-8.1] dm-ploop: fix u32 overflow of the delta BAT byte size", unchanged. - Patch 2 (was 1): drop the comment above set_current_state(), add Reviewed-by. - Patches 3, 4: new. Reject a top delta header whose BAT does not cover the target, and reject empty deltas, instead of skipping the mappings of an empty delta in patch 5. - Patch 5 (was 2): say that raw deltas have never worked since the driver was added; drop the empty delta handling, see patches 3, 4; add Reviewed-by. - Patch 6 (was 3): fix the stale comment of ploop_add_delta() about the order deltas are added in. - Patches 7, 8: split from patch 10. Patch 7 takes bat_lock around md page lookup in ploop_llseek_hole() to protect it from resize, so llseek doesn't wait for long control commands. - Patch 9: new, fixes a use-after-free of the ploop on the last inflight_md decrement from BAT write completion. - Patch 10 (was 4): - test MD_* flags with test_bit(), they are bit numbers; - keep the in-memory m_DiskInUse only after flip_upper_deltas, take it from disk otherwise, so the CBT written on umount isn't lost; - don't wait for preallocation on postsuspend in standby, and make the wait killable; skip the reload and prealloc on resume in standby or while preallocation is pending; - track standby per ploop, as ploop_ctr() of a new table clears the queue bit before the old table is suspended; - drop ctl_rwsem and the suspended check from ploop_llseek_hole(): dm core doesn't call it on a suspended device; - describe the new preresume failures in the commit message. - Patch 11 (was 5): don't truncate in standby, if the wait for preallocation was killed, or if the file size differs from top->file_size, i.e. another ploop writes to the top delta. Shorten the comments of ploop_calc_used_end(), which repeated the commit message. v3: - Split from the common series with dm-qcow2: dm-qcow2 patches are sent as a separate series. Patches 3-6 of v2 are patches 2-5 now. - Patch 1: new patch. - Patch 2: also skip applying the mappings of an empty delta, as BAT iterators can't handle nr_be == 0. - Patch 4: wait for inflight_md on postsuspend, as data bios are completed before BAT writeback is finished, and use wake_up() for inflight_md_wq; reload metadata under memalloc_noio_save(), as the device is suspended; restore m_Sig, m_Type and m_Sectors on reload failure. - Patch 5: don't truncate anything if m_FormatExtensionOffset is not cluster-aligned or out of range; truncate under memalloc_noio_save(). v2: - Add dm-ploop support (patches 3-6), as requested in v1 review. - dm-qcow2: move get_md_page_sync() to a separate patch as qcow2_md_page_read_sync() and use it in qcow2_parse_header() as well. - dm-qcow2: start the refcount scan below file_preallocated_area_start instead of the end of the file, and truncate to the used end directly instead of min(file_preallocated_area_start, used end). Alexander Ivanov (12): dm-ploop: fix u32 overflow of the delta BAT byte size dm-ploop: fix lost wakeup in ploop_allocator() dm-ploop: reject a delta header whose BAT does not cover the target dm-ploop: reject empty deltas dm-ploop: set delta is_raw before applying its mappings dm-ploop: factor out ploop_read_delta() from ploop_add_delta() dm-ploop: take bat_lock around md page lookup in ploop_llseek_hole() dm-ploop: use wake_up() for inflight_md_wq and dispatcher_wq_prealloc dm-ploop: fix use-after-free on the last inflight_md decrement dm-ploop: fix flip_upper_deltas racing with resume dm-ploop: reload metadata on resume dm-ploop: truncate unused tail of top delta on suspend drivers/md/dm-ploop-bat.c | 280 ++++++++++++++++++++++++++++++++--- drivers/md/dm-ploop-cmd.c | 26 ++-- drivers/md/dm-ploop-map.c | 79 ++++++---- drivers/md/dm-ploop-target.c | 173 +++++++++++++++++----- drivers/md/dm-ploop.h | 22 ++- 5 files changed, 481 insertions(+), 99 deletions(-) -- 2.53.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel