RE: [PATCH 62/79] block: rust: add `TagSet::update_hw_queue_count`
From: Ken Kurematsu
Date: Mon Feb 16 2026 - 18:59:50 EST
Hi Andreas,
> -----Original Message-----
> From: Andreas Hindborg <a.hindborg@xxxxxxxxxx>
> Sent: Monday, February 16, 2026 8:36 AM
> To: Boqun Feng <boqun.feng@xxxxxxxxx>; Jens Axboe <axboe@xxxxxxxxx>;
> Miguel Ojeda <ojeda@xxxxxxxxxx>; Gary Guo <gary@xxxxxxxxxxx>; Björn Roy
> Baron <bjorn3_gh@xxxxxxxxxxxxxx>; Benno Lossin <lossin@xxxxxxxxxx>;
> Alice Ryhl <aliceryhl@xxxxxxxxxx>; Trevor Gross <tmgross@xxxxxxxxx>;
> Danilo Krummrich <dakr@xxxxxxxxxx>; FUJITA Tomonori
> <fujita.tomonori@xxxxxxxxx>; Frederic Weisbecker <frederic@xxxxxxxxxx>;
> Lyude Paul <lyude@xxxxxxxxxx>; Thomas Gleixner <tglx@xxxxxxxxxx>;
> Anna-Maria Behnsen <anna-maria@xxxxxxxxxxxxx>; John Stultz
> <jstultz@xxxxxxxxxx>; Stephen Boyd <sboyd@xxxxxxxxxx>; Lorenzo Stoakes
> <lorenzo.stoakes@xxxxxxxxxx>; Liam R. Howlett
> <Liam.Howlett@xxxxxxxxxx>
> Cc: linux-block@xxxxxxxxxxxxxxx; rust-for-linux@xxxxxxxxxxxxxxx;
> linux-kernel@xxxxxxxxxxxxxxx; linux-mm@xxxxxxxxx; Andreas Hindborg
> <a.hindborg@xxxxxxxxxx>
> Subject: [PATCH 62/79] block: rust: add `TagSet::update_hw_queue_count`
>
> Add a method to `TagSet` that allows changing the number of hardware
> queues
> dynamically.
>
> Signed-off-by: Andreas Hindborg <a.hindborg@xxxxxxxxxx>
> ---
> rust/kernel/block/mq/tag_set.rs | 17 ++++++++++++++++-
> 1 file changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/rust/kernel/block/mq/tag_set.rs
> b/rust/kernel/block/mq/tag_set.rs
> index 4d00979a83dbd..47a162360e628 100644
> --- a/rust/kernel/block/mq/tag_set.rs
> +++ b/rust/kernel/block/mq/tag_set.rs
> @@ -8,6 +8,7 @@
> bindings,
> block::mq::{operations::OperationsVTable, request::RequestDataWrapper,
> Operations},
> error::{self, Result},
> + prelude::*,
> try_pin_init,
> types::{ForeignOwnable, Opaque},
> };
> @@ -34,7 +35,7 @@ pub struct TagSet<T: Operations> {
> }
>
> impl<T: Operations> TagSet<T> {
> - /// Try to create a new tag set
> + /// Try to create a new tag se }t
Is this a typo?
It looks like an unnecessary ' }'.
> pub fn new(
> nr_hw_queues: u32,
> tagset_data: T::TagSetData,
> @@ -142,6 +143,20 @@ pub fn hw_queue_count(&self) -> u32 {
> unsafe { (*self.inner.get()).nr_hw_queues }
> }
>
> + /// Update the number of hardware queues for this tag set.
> + ///
> + /// This operation may fail if memory for tags cannot be allocated.
> + pub fn update_hw_queue_count(&self, nr_hw_queues: u32) -> Result {
> + // SAFETY: blk_mq_update_nr_hw_queues applies internal
> synchronization.
> + unsafe { bindings::blk_mq_update_nr_hw_queues(self.inner.get(),
> nr_hw_queues) }
> +
> + if self.hw_queue_count() == nr_hw_queues {
> + Ok(())
> + } else {
> + Err(ENOMEM)
> + }
> + }
> +
> /// Borrow the [`T::TagSetData`] associated with this tag set.
> pub fn data(&self) -> <T::TagSetData as
> ForeignOwnable>::Borrowed<'_> {
> // SAFETY: By type invariant, `self.inner` is valid.
>
> --
> 2.51.2
>
>
Best regards,
Ken Kurematsu