public inbox for rust-for-linux@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4] rust: block: rnull: update to Pin<KBox<QueueData>> for PinInit
@ 2026-03-17 19:32 ` Adrián García Casado
  2026-03-18  7:44   ` Benno Lossin
  2026-03-18 13:03   ` Andreas Hindborg
  0 siblings, 2 replies; 3+ messages in thread
From: Adrián García Casado @ 2026-03-17 19:32 UTC (permalink / raw)
  To: Andreas Hindborg, Jens Axboe
  Cc: Boqun Feng, Miguel Ojeda, rust-for-linux, linux-block,
	linux-kernel, Adrián García Casado

Utilize the pin_init! macro for QueueData initialization to correctly support in-place initialization patterns. This aligns the driver with standard Rust-for-Linux pinning practices for driver-specific queue data.

Signed-off-by: Adrián García Casado <adriangarciacasado42@gmail.com>
---
 drivers/block/rnull/rnull.rs | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/block/rnull/rnull.rs b/drivers/block/rnull/rnull.rs
index 0ca8715fe..11ea0696d 100644
--- a/drivers/block/rnull/rnull.rs
+++ b/drivers/block/rnull/rnull.rs
@@ -54,7 +54,7 @@ fn new(
     ) -> Result<GenDisk<Self>> {
         let tagset = Arc::pin_init(TagSet::new(1, 256, 1), GFP_KERNEL)?;
 
-        let queue_data = Box::new(QueueData { irq_mode }, GFP_KERNEL)?;
+        let queue_data = Box::pin_init(pin_init!(QueueData { irq_mode }), GFP_KERNEL)?;
 
         gen_disk::GenDiskBuilder::new()
             .capacity_sectors(capacity_mib << (20 - block::SECTOR_SHIFT))
@@ -65,16 +65,21 @@ fn new(
     }
 }
 
+#[pin_data]
 struct QueueData {
     irq_mode: IRQMode,
 }
 
 #[vtable]
 impl Operations for NullBlkDevice {
-    type QueueData = KBox<QueueData>;
+    type QueueData = Pin<KBox<QueueData>>;
 
     #[inline(always)]
-    fn queue_rq(queue_data: &QueueData, rq: ARef<mq::Request<Self>>, _is_last: bool) -> Result {
+    fn queue_rq(
+        queue_data: Pin<&QueueData>,
+        rq: ARef<mq::Request<Self>>,
+        _is_last: bool,
+    ) -> Result {
         match queue_data.irq_mode {
             IRQMode::None => mq::Request::end_ok(rq)
                 .map_err(|_e| kernel::error::code::EIO)
@@ -87,7 +92,7 @@ fn queue_rq(queue_data: &QueueData, rq: ARef<mq::Request<Self>>, _is_last: bool)
         Ok(())
     }
 
-    fn commit_rqs(_queue_data: &QueueData) {}
+    fn commit_rqs(_queue_data: Pin<&QueueData>) {}
 
     fn complete(rq: ARef<mq::Request<Self>>) {
         mq::Request::end_ok(rq)
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v4] rust: block: rnull: update to Pin<KBox<QueueData>> for PinInit
  2026-03-17 19:32 ` [PATCH v4] rust: block: rnull: update to Pin<KBox<QueueData>> for PinInit Adrián García Casado
@ 2026-03-18  7:44   ` Benno Lossin
  2026-03-18 13:03   ` Andreas Hindborg
  1 sibling, 0 replies; 3+ messages in thread
From: Benno Lossin @ 2026-03-18  7:44 UTC (permalink / raw)
  To: Adrián García Casado, Andreas Hindborg, Jens Axboe
  Cc: Boqun Feng, Miguel Ojeda, rust-for-linux, linux-block,
	linux-kernel

On Tue Mar 17, 2026 at 8:32 PM CET, Adrián García Casado wrote:
> Utilize the pin_init! macro for QueueData initialization to correctly support in-place initialization patterns. This aligns the driver with standard Rust-for-Linux pinning practices for driver-specific queue data.
>
> Signed-off-by: Adrián García Casado <adriangarciacasado42@gmail.com>

You haven't replied to Miguel's questions and disregarded his advice to
wait for maintainers to get back to you before sending a new version.

The patch itself is completely unnecessary, there is no need for pinning
for `QueueData` proven by the fact that the code works as is. Please
reply with an email explaining your thought process and don't send
another version.

Cheers,
Benno

> ---
>  drivers/block/rnull/rnull.rs | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/block/rnull/rnull.rs b/drivers/block/rnull/rnull.rs
> index 0ca8715fe..11ea0696d 100644
> --- a/drivers/block/rnull/rnull.rs
> +++ b/drivers/block/rnull/rnull.rs
> @@ -54,7 +54,7 @@ fn new(
>      ) -> Result<GenDisk<Self>> {
>          let tagset = Arc::pin_init(TagSet::new(1, 256, 1), GFP_KERNEL)?;
>  
> -        let queue_data = Box::new(QueueData { irq_mode }, GFP_KERNEL)?;
> +        let queue_data = Box::pin_init(pin_init!(QueueData { irq_mode }), GFP_KERNEL)?;
>  
>          gen_disk::GenDiskBuilder::new()
>              .capacity_sectors(capacity_mib << (20 - block::SECTOR_SHIFT))
> @@ -65,16 +65,21 @@ fn new(
>      }
>  }
>  
> +#[pin_data]
>  struct QueueData {
>      irq_mode: IRQMode,
>  }
>  
>  #[vtable]
>  impl Operations for NullBlkDevice {
> -    type QueueData = KBox<QueueData>;
> +    type QueueData = Pin<KBox<QueueData>>;
>  
>      #[inline(always)]
> -    fn queue_rq(queue_data: &QueueData, rq: ARef<mq::Request<Self>>, _is_last: bool) -> Result {
> +    fn queue_rq(
> +        queue_data: Pin<&QueueData>,
> +        rq: ARef<mq::Request<Self>>,
> +        _is_last: bool,
> +    ) -> Result {
>          match queue_data.irq_mode {
>              IRQMode::None => mq::Request::end_ok(rq)
>                  .map_err(|_e| kernel::error::code::EIO)
> @@ -87,7 +92,7 @@ fn queue_rq(queue_data: &QueueData, rq: ARef<mq::Request<Self>>, _is_last: bool)
>          Ok(())
>      }
>  
> -    fn commit_rqs(_queue_data: &QueueData) {}
> +    fn commit_rqs(_queue_data: Pin<&QueueData>) {}
>  
>      fn complete(rq: ARef<mq::Request<Self>>) {
>          mq::Request::end_ok(rq)


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v4] rust: block: rnull: update to Pin<KBox<QueueData>> for PinInit
  2026-03-17 19:32 ` [PATCH v4] rust: block: rnull: update to Pin<KBox<QueueData>> for PinInit Adrián García Casado
  2026-03-18  7:44   ` Benno Lossin
@ 2026-03-18 13:03   ` Andreas Hindborg
  1 sibling, 0 replies; 3+ messages in thread
From: Andreas Hindborg @ 2026-03-18 13:03 UTC (permalink / raw)
  To: Adrián García Casado, Jens Axboe
  Cc: Boqun Feng, Miguel Ojeda, rust-for-linux, linux-block,
	linux-kernel, Adrián García Casado

Adrián García Casado <adriangarciacasado42@gmail.com> writes:

> Utilize the pin_init! macro for QueueData initialization to correctly support in-place initialization patterns. This aligns the driver with standard Rust-for-Linux pinning practices for driver-specific queue data.
>
> Signed-off-by: Adrián García Casado <adriangarciacasado42@gmailcom>

I don't understand the rationale for this patch. I already have a patch
on list that pins `QueueData` for rnull [1], but not for the reasons you
mention here. `QueueData` does not need to be pinned if it does not have
any fields of types that must always be pinned.


Best regards,
Andreas Hindborg


[1] https://lore.kernel.org/r/20260216-rnull-v6-19-rc5-send-v1-13-de9a7af4b469@kernel.org



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-03-18 13:03 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <2hK6oarCGyUX9gXNJ6wZZoePYLShXTYjw8wOlhbW1szik-km-pMO8wtX6dgm5i34HLG2zxzqZgK-cb2MiDtdpw==@protonmail.internalid>
2026-03-17 19:32 ` [PATCH v4] rust: block: rnull: update to Pin<KBox<QueueData>> for PinInit Adrián García Casado
2026-03-18  7:44   ` Benno Lossin
2026-03-18 13:03   ` Andreas Hindborg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox