From: Tao Cui <cui.tao@linux.dev>
To: linux-block@vger.kernel.org, shinichiro.kawasaki@wdc.com
Cc: hch@lst.de, yukuai@kernel.org, cui.tao@linux.dev,
Tao Cui <cuitao@kylinos.cn>
Subject: [PATCH blktests] tests/throtl: add a new test 009
Date: Thu, 13 Aug 2026 22:40:41 +0800 [thread overview]
Message-ID: <20260813144041.1715866-1-cui.tao@linux.dev> (raw)
From: Tao Cui <cuitao@kylinos.cn>
Test the boundary condition of removing a cgroup while it still has IO
queued in the blk-throttle queue. The queued bios must be flushed through
without any blk-cgroup or blk-throttle warning.
The dmesg check matches any blk-cgroup / blk-throttle warning rather than a
single call site, so it is not tied to one symbol.
Signed-off-by: Tao Cui <cuitao@kylinos.cn>
---
See also the related blkcg "store blkcg in bio" RFC:
https://lore.kernel.org/r/20260804065313.2092022-1-yukuai@kernel.org
tests/throtl/009 | 67 ++++++++++++++++++++++++++++++++++++++++++++
tests/throtl/009.out | 2 ++
2 files changed, 69 insertions(+)
create mode 100755 tests/throtl/009
create mode 100644 tests/throtl/009.out
diff --git a/tests/throtl/009 b/tests/throtl/009
new file mode 100755
index 0000000..1f4ed67
--- /dev/null
+++ b/tests/throtl/009
@@ -0,0 +1,67 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-3.0+
+# Copyright (C) 2026 Tao Cui <cuitao@kylinos.cn>
+#
+# Regression test for removing a cgroup while IO is still queued in the
+# blk-throttle queue. The queued bios must be flushed without any
+# blk-cgroup or blk-throttle warning, and without leaking the blkg
+# reference they pin.
+
+. tests/throtl/rc
+
+THROTL_BLKDEV_TYPES="nullb"
+
+DESCRIPTION="queued throttled IO vs. cgroup removal must not warn"
+QUICK=1
+
+set_conditions() {
+ _set_throtl_blkdev_type "$@"
+}
+
+test() {
+ echo "Running ${TEST_NAME}"
+
+ if ! _set_up_throtl; then
+ return 1
+ fi
+
+ # Throttle reads so the bio queues in the throttle queue.
+ _throtl_set_limits rbps=4096
+
+ (
+ echo "$BASHPID" > "$CGROUP2_DIR/$THROTL_DIR/cgroup.procs"
+ exec dd if=/dev/"$THROTL_DEV" of=/dev/null bs=1M count=1 status=none
+ ) &
+ local io_pid=$!
+ sleep 2
+
+ # Move the reader to the cgroup2 root so the throttle cgroup can be
+ # removed while its bio is still queued. $CGROUP2_DIR has +io in its
+ # subtree_control and so cannot hold processes.
+ echo "$io_pid" > "$(_cgroup2_base_dir)/cgroup.procs"
+
+ # Remove the throttle cgroup while its bio is still queued.
+ rmdir "$CGROUP2_DIR/$THROTL_DIR"
+ sleep 3
+
+ kill "$io_pid" 2>/dev/null
+ wait "$io_pid" 2>/dev/null
+
+ # $THROTL_DIR is already gone; tear down the rest by hand.
+ if [[ $THROTL_CLEAR_CGROUP2_DIR_CONTROL_IO == true ]]; then
+ echo "-io" > "$CGROUP2_DIR/cgroup.subtree_control"
+ fi
+ if [[ $THROTL_CLEAR_BASE_SUBTREE_CONTROL_IO == true ]]; then
+ echo "-io" > "$(_cgroup2_base_dir)/cgroup.subtree_control"
+ fi
+ _exit_cgroup2
+ _exit_throtl_blkdev
+
+ if _dmesg_since_test_start | grep -qE "WARNING:.*(blk-cgroup|blk-throttle)"; then
+ echo "WARNING: blkcg/blk-throttle warning on cgroup removal with queued IO"
+ _dmesg_since_test_start | grep -A 12 -E "WARNING:.*(blk-cgroup|blk-throttle)" \
+ >> "$FULL"
+ fi
+
+ echo "Test complete"
+}
diff --git a/tests/throtl/009.out b/tests/throtl/009.out
new file mode 100644
index 0000000..be675dd
--- /dev/null
+++ b/tests/throtl/009.out
@@ -0,0 +1,2 @@
+Running throtl/009
+Test complete
--
2.43.0
next reply other threads:[~2026-08-13 14:40 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-13 14:40 Tao Cui [this message]
2026-08-18 12:42 ` [PATCH blktests] tests/throtl: add a new test 009 Shin'ichiro Kawasaki
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=20260813144041.1715866-1-cui.tao@linux.dev \
--to=cui.tao@linux.dev \
--cc=cuitao@kylinos.cn \
--cc=hch@lst.de \
--cc=linux-block@vger.kernel.org \
--cc=shinichiro.kawasaki@wdc.com \
--cc=yukuai@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox