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 97B9480726 for ; Tue, 13 Oct 2026 07:56:48 +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 69D7tWQM009981; Tue, 13 Oct 2026 10:55:33 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69D7tWQM009981 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="tuSQzlz+" Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69D7tRN5009936 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Tue, 13 Oct 2026 10:55:27 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69D7tRN5009936 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-48c4d7ba211so1621054f8f.3 for ; Tue, 13 Oct 2026 00:55:27 -0700 (PDT) X-Gm-Message-State: AFq9FYKgkTkw3q11P+mAfk3AQ1vXzMDSZk24O1QKAQ5H9EkylsE1YWbd wROFZcgGZCIy/rWrtA1vsGXDaoAIAy+tAblyy2QvOXGyj2EZHg3VtCc0z4yOuDtsj4oqi5/Fd4B 7qO74hYzXLWOj/vygJiLCtwRLF3yfOX27Sa4aq3mcJsMoPLmmX7A/QQ== X-Gm-Gg: AYBFou2k7dmE7rKalGJdiosy2jk4W/so87K2Tyzk0eB6iIwW8DMw7H9gJdYm2tbystH cHEO87RaLnRQrcJ9IfV7QtHb86mWiPukipSdI53EbkwXa5vciyL7VgYn1nLVUlh++vnQybNVpSo 9JYbqWvTxPSdPofFM3LX7hVREC7lSbC8zTbMIr/bvY6Om6NL30mSVgV3RSJmL6be7FDGjkomQVB 097+B9Kpe+w3d64fr6EaZ1GqB71uuJaFqnZIUMGo9uo1QyESvWAaKhUbKVApF1nQjMVaZ7zxnr0 3X61zyPjTXdox2ldutb0c1y7MvuW60WyMpMi1fioZzt7L/p5yJvyIKHvsoR6JAfYYihcvXpBtNf CCWIu2ELuP3q5gpkKCDVPFma7NSvx X-Received: by 2002:a05:6000:2589:b0:488:80d0:873a with SMTP id ffacd0b85a97d-48dba7b350amr20099059f8f.5.1791878126840; Tue, 13 Oct 2026 00:55:26 -0700 (PDT) X-Received: by 2002:a05:6000:2589:b0:488:80d0:873a with SMTP id ffacd0b85a97d-48dba7b350amr20099022f8f.5.1791878126099; Tue, 13 Oct 2026 00:55:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1791878126; cv=none; d=google.com; s=arc-20260327; b=FE8QwofL0VGkv5YmWi6kITfvJES2Kbo/9HBTwdi4/dNIFoziUAersd6IBSasy1PfXO 6UMX3i/BFCwVQXPcbWsQQkP8tM1jIe/wZH6jB0OgUp1sZcp8+B/Q/EMKe7x3XhyW2k4k ZX/Edbl3fkN7Bhpq9zfry5KLnJ8K9X0FPYQDbENBhi0qb6ZXa6mX/XcK+urLXVlFyqqW 26Fq5wkhFkdrPcQRvvXARptnO7VXtxKzyWbsgMBL5uxVdHC1RPXInZaT8jXwJXoOWW9F KaxIdIR27ULbFQJerNrbJh+s9Bfzniqev4mMaINYp6nhIYceintIOKSZ+HJbgkWWZmqE DXKQ== 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=oHiXYD7YGB6TdUuhdafxC2AGHaetbgmKgPpd2FDoBeo=; fh=M+TyAUhAp4+t7uzAVeqNdLHW5eNz2FQXSv4TjrRhpCk=; b=FtOtFAZ4r1cegw0MNECrMAl3dsKxPUtxQ089zIZMA61pOPhDCbtOe1CmqvfBZrbRFp rpuepLv2roexOfSiaUrkt/QZFm65wPoVg429eIQ2l2JW4YuyQPgVc/Z+12t6BvzndcUE 8xvAFlsDg735SzNxTOF9LrVKs/ZygvNV3JUQxBxVc07h8fgLDW1KkQalcoEGWCR/hX/V rNxeClolmGRSVEGDhOxj0exCioVvFyDI20y/8GC2LV9TpDgfHC2lsllNOO9jFEiINNcy Q+TJPElD8ZBzFAmFhnrCW60abVcfRtmf+j9AEMDvnxpXeaIqfrme/e5owCKmkZXHw06K EHjw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=tuSQzlz+; 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-48de0ac8099si4183059f8f.46.2026.10.13.00.55.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 13 Oct 2026 00:55:26 -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=tuSQzlz+; 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=oHiXYD7YGB6TdUuhdafxC2AGHaetbgmKgPpd2FDoBeo=; b=tuSQzlz+JeoF kaw555mXGJlj43zngvOBmib6EgdfYhCLla2Gv+oI//UJ4G02iP6RsLC5E3o77U9g5ZLIwozfP4bxu vnGGIsunc8sKrwh2GmQDxP8/i9O8fBB4KObGB3Y+xcDhRQQI4+G/Ld2s9xPBsTTEqU9IkcQhOQMau 5UY75E2SN5tt/7Z6Rmam45ohgU9g+F+qpMcEe7bsfY9/wrCGodUERsZjNhgi0X9Rv+5N4mWOF2u8A BcCeF1KIRrpO7QF9SPsZayvqO9Bk7yEFuXKV62mABLmLfv96T1tPc5qSK+oLya80nvHnDXM6m7/UY Pwv1Zpbn1+bMvAR82vlNmg==; 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 1xGXIg-004zlI-0c; Tue, 13 Oct 2026 09:55:15 +0200 From: Alexander Ivanov To: den@openvz.org Date: Tue, 13 Oct 2026 09:55:02 +0200 Message-ID: <20261013075513.90618-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 v5 00/11] 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. The corresponding ploop userspace changes: https://bitbucket.org/openvz/ploop.ovz/pull-requests/486 https://virtuozzo.atlassian.net/browse/VSTOR-148171 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 (11): 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: 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 | 152 +++++++++++++++---- drivers/md/dm-ploop.h | 22 ++- 5 files changed, 469 insertions(+), 90 deletions(-) -- 2.53.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel