From: no-reply@sashiko.virtuozzo.com
To: den@openvz.org, Alexander Ivanov <alexander.ivanov@virtuozzo.com>
Cc: devel@openvz.org
Subject: Re: [Devel] [PATCH hci-8.1 v4 10/11] dm-ploop: reload metadata on resume
Date: Mon, 12 Oct 2026 13:44:03 +0000 [thread overview]
Message-ID: <010701a1305b2a79-5ea935d7-7bd7-4f9d-bfb9-56055f0332ee-000000@eu-central-1.amazonses.com> (raw)
In-Reply-To: <20261012132646.41494-11-alexander.ivanov@virtuozzo.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] dm-ploop: ploop_postsuspend() waits uninterruptibly for BAT writeback, even in standby
--
Subject: Re: [PATCH] dm-ploop: reload metadata on resume
commit bd5e28d3cdaaa9ef0b4e2b1af46f0379281a0d21
Author: Alexander Ivanov <alexander.ivanov@virtuozzo.com>
dm-ploop: reload metadata on resume
This patch reloads the top delta header, the BAT of every delta and the
delta file sizes in ploop_preresume(), and rebuilds the BAT tree and
holes_bitmap. It also moves preallocation from ploop_ctr() to
ploop_preresume(), tracks standby per ploop, and adds waits in
ploop_postsuspend() for pending preallocation and for inflight BAT
writeback.
Link: https://virtuozzo.atlassian.net/browse/VSTOR-148171
> diff --git a/drivers/md/dm-ploop-target.c b/drivers/md/dm-ploop-target.c
> --- a/drivers/md/dm-ploop-target.c
> +++ b/drivers/md/dm-ploop-target.c
[ ... ]
> static void ploop_postsuspend(struct dm_target *ti)
> {
> + struct ploop *ploop = ti->private;
> +
> + /*
> + * Let the next resumed ploop (maybe of reloaded table)
> + * see final size of the top delta. Don't wait in standby
> + * mode: the allocator may be stuck on the dead file, while
> + * dm_replace() of libploop must be able to suspend the device
> + * to recover it. The wait is killable for the same reason.
> + * [ ... ]
> + */
> + if (!ploop_is_standby(ploop))
> + ploop_wait_prealloc(ploop);
> + /*
> + * Data bios are completed before BAT writeback is finished
> + * (see ploop_put_piwb()), so wait for it explicitly to make
> + * md pages clean for ploop_reload_metadata().
> + */
> + wait_event(ploop->inflight_md_wq, !atomic_read(&ploop->inflight_md));
> ploop_set_suspended(ti, true);
> }
[Severity: Medium]
Can this wait_event() hang suspend when the backing file is dead?
The preallocation wait just above is skipped in standby and is killable,
because the allocator may be stuck on the dead file and dm_replace() of
libploop has to be able to suspend the device to recover it.
The inflight_md wait has no such escape. It is uninterruptible, and it is
also reached when ploop_is_standby() is true.
inflight_md is decremented only when the BAT write kiocb completes:
ploop_bat_write_complete()
ploop_put_piwb()
ploop_dec_inflight_md()
atomic_dec_and_test(&ploop->inflight_md)
wake_up_locked(&ploop->inflight_md_wq)
Standby is set only in ploop_check_standby_mode(), after some IO has
already completed with -EBUSY, -ENOTCONN or -EIO:
ploop_check_standby_mode()
...
WRITE_ONCE(ploop->standby, true);
That does not cancel or complete other BAT writes already in flight. If one
of them is stuck on the same dead file, inflight_md stays above zero and the
suspending task sits in D state.
ploop_postsuspend() returns void, so the wait cannot be turned into an
error. Whether a BAT write to a dead file hangs or fails depends on the
backing filesystem, so I could not confirm this from the code alone.
The follow-up patch "dm-ploop: truncate unused tail of top delta on
suspend" keeps this as a plain wait_event(), and moves it to run under
ctl_rwsem held for write. Other paths that take ctl_rwsem would then also
block behind it.
Would it make sense to make this wait killable, or to skip or bound it in
standby, as is done for the preallocation wait?
--
Sashiko AI review · https://sashiko.vzint.dev/#/patchset/20261012132646.41494-1-alexander.ivanov@virtuozzo.com?part=10
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel
next prev parent reply other threads:[~2026-10-12 13:45 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-12 13:26 [Devel] [PATCH hci-8.1 v4 00/11] dm-ploop: give back unused tail of top delta on suspend Alexander Ivanov
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 01/11] dm-ploop: fix u32 overflow of the delta BAT byte size Alexander Ivanov
2026-10-12 13:33 ` no-reply
2026-10-13 6:42 ` Alexander Ivanov
2026-10-13 7:00 ` Alexander Ivanov
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 02/11] dm-ploop: fix lost wakeup in ploop_allocator() Alexander Ivanov
2026-10-12 13:30 ` no-reply
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 03/11] dm-ploop: reject a delta header whose BAT does not cover the target Alexander Ivanov
2026-10-12 13:31 ` no-reply
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 04/11] dm-ploop: reject empty deltas Alexander Ivanov
2026-10-12 13:32 ` no-reply
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 05/11] dm-ploop: set delta is_raw before applying its mappings Alexander Ivanov
2026-10-12 13:34 ` no-reply
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 06/11] dm-ploop: factor out ploop_read_delta() from ploop_add_delta() Alexander Ivanov
2026-10-12 13:34 ` no-reply
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 07/11] dm-ploop: take bat_lock around md page lookup in ploop_llseek_hole() Alexander Ivanov
2026-10-12 13:36 ` no-reply
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 08/11] dm-ploop: use wake_up() for inflight_md_wq and dispatcher_wq_prealloc Alexander Ivanov
2026-10-12 13:35 ` no-reply
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 09/11] dm-ploop: fix use-after-free on the last inflight_md decrement Alexander Ivanov
2026-10-12 13:40 ` no-reply
2026-10-13 6:54 ` Alexander Ivanov
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 10/11] dm-ploop: reload metadata on resume Alexander Ivanov
2026-10-12 13:44 ` no-reply [this message]
2026-10-13 7:04 ` Alexander Ivanov
2026-10-12 13:26 ` [Devel] [PATCH hci-8.1 v4 11/11] dm-ploop: truncate unused tail of top delta on suspend Alexander Ivanov
2026-10-12 13:47 ` no-reply
2026-10-13 7:08 ` Alexander Ivanov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=010701a1305b2a79-5ea935d7-7bd7-4f9d-bfb9-56055f0332ee-000000@eu-central-1.amazonses.com \
--to=no-reply@sashiko.virtuozzo.com \
--cc=alexander.ivanov@virtuozzo.com \
--cc=den@openvz.org \
--cc=devel@openvz.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.