From: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
To: Konstantin Khorenko <khorenko@virtuozzo.com>
Cc: devel@openvz.org
Subject: [Devel] [PATCH hci-8.1 v4 0/3] block/blk-cbt: don't lose writes held across a dm suspend
Date: Tue, 27 Oct 2026 12:47:39 +0100 [thread overview]
Message-ID: <20261027-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v4-0-b4d92264f6a4@virtuozzo.com> (raw)
Fix CBT missing writes that request-based dm holds across a suspend,
which made incremental backups taken with ploop-backup silently lose
data.
Claude tested full and incremental ploop-backup under write load (a
random writer, and fio with 4 jobs x iodepth 64): the incremental backup
lost blocks without the fix, and was consistent 10/10 with it. CBT
start/stop and device resize under fio ran without warnings.
Known pre-existing problem, not fixed here: when blk_cbt_add() evicts an
extent from the per-cpu cache (or in CBT_NOCACHE mode), __blk_cbt_set()
may allocate a bitmap page with the RCU lock dropped in the middle of
the cbt_list walk, so a concurrent CBT stop or resize can free the next
cbt under the walk. It also sleeps there for REQ_NOWAIT bios. With this
series the page is usually allocated by then, so it is rarer.
https://virtuozzo.atlassian.net/browse/VSTOR-149268
Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
---
Changes in v4:
- Only queue the bitmap page allocation at submission instead of
allocating there: the sleeping allocation dropped the RCU lock in the
middle of the cbt_list walk, and could put an extent into the cache of
a cbt that a resize had just replaced (sashiko review).
- Link to v3: http://lore.virtuozzo.com/20261027-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v3-0-e1bc61a829a0@virtuozzo.com
Changes in v3:
- New patch: account a write delayed by blk-throttle in CBT, as the
throttle dispatch work skipped CBT (sashiko review).
- New patch: shift the CBT block size as unsigned, and use the unsigned
shift in the new cbt_set_present() too (sashiko review).
- Link to v2: http://lore.virtuozzo.com/20261027-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v2-1-c64ee6178730@virtuozzo.com
Changes in v2:
- No GFP_ATOMIC allocation at dispatch: bitmap pages are now allocated
at bio submission, and the dispatch hook only sets bits in present pages.
- A page missing at dispatch (a write submitted before BLKCBTSTART) is
allocated with GFP_NOIO from the kblockd workqueue, and dm-rq returns
BLK_STS_RESOURCE so that blk-mq dispatches the request again later,
instead of setting CBT_ERROR when an atomic allocation fails.
- Move the hook from dm_start_request() to dm_mq_queue_rq(), before the
request is started, so that it can return BLK_STS_RESOURCE.
- Link to v1: http://lore.virtuozzo.com/20261016-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v1-1-1f20b151431d@virtuozzo.com
---
Pavel Tikhomirov (3):
block/blk-cbt: shift the block size as unsigned
block/blk-throttle: account a throttled write in CBT
block/blk-cbt: account a write request also when dm starts it
block/blk-cbt.c | 176 ++++++++++++++++++++++++++++++++++++++++++++++++-
block/blk-throttle.c | 5 +-
drivers/md/dm-rq.c | 3 +
include/linux/blkdev.h | 5 ++
4 files changed, 185 insertions(+), 4 deletions(-)
---
base-commit: f5d1fdcfffe101fe2bafa7df09d95d2e811c5c5e
change-id: 20261016-ptikhomirov-vstor-149268-cbt-account-at-rq-start-a592cf2010aa
Best regards,
--
Pavel Tikhomirov <ptikhomirov@virtuozzo.com>
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel
next reply other threads:[~2026-10-27 11:49 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-27 11:47 Pavel Tikhomirov [this message]
2026-10-27 11:47 ` [Devel] [PATCH hci-8.1 v4 1/3] block/blk-cbt: shift the block size as unsigned Pavel Tikhomirov
2026-10-27 11:50 ` no-reply
2026-10-27 11:47 ` [Devel] [PATCH hci-8.1 v4 2/3] block/blk-throttle: account a throttled write in CBT Pavel Tikhomirov
2026-10-27 11:52 ` no-reply
2026-10-27 11:47 ` [Devel] [PATCH hci-8.1 v4 3/3] block/blk-cbt: account a write request also when dm starts it Pavel Tikhomirov
2026-10-27 11:55 ` no-reply
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=20261027-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v4-0-b4d92264f6a4@virtuozzo.com \
--to=ptikhomirov@virtuozzo.com \
--cc=devel@openvz.org \
--cc=khorenko@virtuozzo.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox