* [PATCH v2 0/5] rust: add DropGuard
@ 2026-09-26 16:35 Mohamed Osama
2026-09-26 16:35 ` [PATCH v2 1/5] rust: add DropGuard KUnit test configuration Mohamed Osama
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: Mohamed Osama @ 2026-09-26 16:35 UTC (permalink / raw)
To: ojeda
Cc: boqun, gary, bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross,
dakr, daniel.almeida, tamird, acourbot, work, longman, lyude,
linux-block, linux-serial, rust-for-linux, linux-kernel
Add the Rust kernel DropGuard API and migrate the existing ScopeGuard
users in the block, serdev, and locking code.
DropGuard runs a FnOnce callback when dropped and provides dismiss() to
take ownership of the wrapped value without running the cleanup callback.
Changes since v1:
- Split the changes into separate patches for each affected module.
- Added a separate KUnit configuration patch.
The series was tested with:
- make LLVM=1 rustfmtcheck
- make LLVM=1 rustdoc
- make LLVM=1 -j$(nproc)
- git diff --check
- scripts/checkpatch.pl
Mohamed Osama (5):
rust: add DropGuard KUnit test configuration
rust: mem: add DropGuard
rust: block: gen_disk: use DropGuard
rust: serdev: use DropGuard
rust: sync: lock: use DropGuard
rust/kernel/Kconfig.test | 10 +++
rust/kernel/block/mq/gen_disk.rs | 11 +--
rust/kernel/mem.rs | 123 +++++++++++++++++++++++++++++++
rust/kernel/serdev.rs | 10 +--
rust/kernel/sync/lock.rs | 5 +-
5 files changed, 146 insertions(+), 13 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 1/5] rust: add DropGuard KUnit test configuration
2026-09-26 16:35 [PATCH v2 0/5] rust: add DropGuard Mohamed Osama
@ 2026-09-26 16:35 ` Mohamed Osama
2026-09-26 16:41 ` sashiko-bot
2026-09-26 16:35 ` [PATCH v2 2/5] rust: mem: add DropGuard Mohamed Osama
` (3 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Mohamed Osama @ 2026-09-26 16:35 UTC (permalink / raw)
To: ojeda
Cc: boqun, gary, bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross,
dakr, daniel.almeida, tamird, acourbot, work, longman, lyude,
linux-block, linux-serial, rust-for-linux, linux-kernel
Add a KUnit configuration option for testing the Rust DropGuard API.
The option follows the existing Rust KUnit test configuration pattern and
defaults to KUNIT_ALL_TESTS.
Signed-off-by: Mohamed Osama <mohamed.osama189110@gmail.com>
---
rust/kernel/Kconfig.test | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/rust/kernel/Kconfig.test b/rust/kernel/Kconfig.test
index e6a5c7a795f0..011c72f14e2c 100644
--- a/rust/kernel/Kconfig.test
+++ b/rust/kernel/Kconfig.test
@@ -33,6 +33,16 @@ config RUST_KVEC_KUNIT_TEST
If unsure, say N.
+config RUST_DROP_GUARD_KUNIT_TEST
+ bool "KUnit tests for Rust DropGuard API" if !KUNIT_ALL_TESTS
+ default KUNIT_ALL_TESTS
+ help
+ This option enables KUnit tests for the Rust DropGuard API.
+ These are only for development and testing, not for regular
+ kernel use cases.
+
+ If unsure, say N.
+
config RUST_BITMAP_KUNIT_TEST
bool "KUnit tests for Rust bitmap API" if !KUNIT_ALL_TESTS
default KUNIT_ALL_TESTS
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 2/5] rust: mem: add DropGuard
2026-09-26 16:35 [PATCH v2 0/5] rust: add DropGuard Mohamed Osama
2026-09-26 16:35 ` [PATCH v2 1/5] rust: add DropGuard KUnit test configuration Mohamed Osama
@ 2026-09-26 16:35 ` Mohamed Osama
2026-09-26 16:46 ` sashiko-bot
2026-09-26 16:35 ` [PATCH v2 3/5] rust: block: gen_disk: use DropGuard Mohamed Osama
` (2 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Mohamed Osama @ 2026-09-26 16:35 UTC (permalink / raw)
To: ojeda
Cc: boqun, gary, bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross,
dakr, daniel.almeida, tamird, acourbot, work, longman, lyude,
linux-block, linux-serial, rust-for-linux, linux-kernel
Add DropGuard to the Rust kernel memory module.
DropGuard runs a FnOnce callback when the guard is dropped and provides
dismiss() to take ownership of the wrapped value without running the
cleanup callback.
This provides the Rust kernel with a scope guard API matching the
upstream Rust DropGuard interface.
Signed-off-by: Mohamed Osama <mohamed.osama189110@gmail.com>
---
rust/kernel/mem.rs | 123 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 123 insertions(+)
diff --git a/rust/kernel/mem.rs b/rust/kernel/mem.rs
index f2d4cdf87d00..17807c8e67ac 100644
--- a/rust/kernel/mem.rs
+++ b/rust/kernel/mem.rs
@@ -4,6 +4,95 @@
use crate::prelude::*;
+use core::{
+ mem::ManuallyDrop,
+ ops::{Deref, DerefMut},
+};
+
+/// Wraps a value and runs a closure when dropped.
+///
+/// This is useful for running cleanup code when leaving a scope.
+///
+/// The [`DropGuard::dismiss`] function can be used to take ownership of the wrapped
+/// value without running the cleanup function.
+#[doc(alias = "ScopeGuard")]
+#[doc(alias = "defer")]
+pub struct DropGuard<T, F>
+where
+ F: FnOnce(T),
+{
+ inner: ManuallyDrop<T>,
+ f: ManuallyDrop<F>,
+}
+
+impl<T, F> DropGuard<T, F>
+where
+ F: FnOnce(T),
+{
+ /// Creates a new `DropGuard`.
+ #[inline]
+ #[must_use]
+ pub fn new(inner: T, f: F) -> Self {
+ Self {
+ inner: ManuallyDrop::new(inner),
+ f: ManuallyDrop::new(f),
+ }
+ }
+
+ /// Consumes the `DropGuard`, returning the wrapped value without
+ /// running the cleanup function.
+ #[inline]
+ pub fn dismiss(guard: Self) -> T {
+ let mut guard = ManuallyDrop::new(guard);
+
+ // SAFETY: We have taken ownership of the guard and prevent its destructor from running.
+ let value = unsafe { ManuallyDrop::take(&mut guard.inner) };
+
+ // SAFETY: We have taken ownership of the guard.
+ unsafe { ManuallyDrop::drop(&mut guard.f) };
+
+ value
+ }
+}
+
+impl<T, F> Deref for DropGuard<T, F>
+where
+ F: FnOnce(T),
+{
+ type Target = T;
+
+ #[inline]
+ fn deref(&self) -> &T {
+ &self.inner
+ }
+}
+
+impl<T, F> DerefMut for DropGuard<T, F>
+where
+ F: FnOnce(T),
+{
+ #[inline]
+ fn deref_mut(&mut self) -> &mut T {
+ &mut self.inner
+ }
+}
+
+impl<T, F> Drop for DropGuard<T, F>
+where
+ F: FnOnce(T),
+{
+ #[inline]
+ fn drop(&mut self) {
+ // SAFETY: `DropGuard` is in the process of being dropped.
+ let inner = unsafe { ManuallyDrop::take(&mut self.inner) };
+
+ // SAFETY: `DropGuard` is in the process of being dropped.
+ let f = unsafe { ManuallyDrop::take(&mut self.f) };
+
+ f(inner);
+ }
+}
+
/// Transmute between two types.
///
/// Use this instead of [`core::mem::transmute`] when it is known that sizes are identical but this
@@ -232,3 +321,37 @@ unsafe impl AsReprMut for $signed {}
// `usize` is not normalized to particular integer for portability.
usize isize,
}
+
+#[cfg(CONFIG_RUST_DROP_GUARD_KUNIT_TEST)]
+#[macros::kunit_tests(rust_drop_guard)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_drop_runs_cleanup() {
+ let mut cleaned = false;
+
+ {
+ let _guard = DropGuard::new(42, |value| {
+ assert_eq!(value, 42);
+ cleaned = true;
+ });
+ }
+
+ assert!(cleaned);
+ }
+
+ #[test]
+ fn test_dismiss_returns_value_without_cleanup() {
+ let mut cleaned = false;
+
+ let guard = DropGuard::new(42, |_| {
+ cleaned = true;
+ });
+
+ let value = DropGuard::dismiss(guard);
+
+ assert_eq!(value, 42);
+ assert!(!cleaned);
+ }
+}
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 3/5] rust: block: gen_disk: use DropGuard
2026-09-26 16:35 [PATCH v2 0/5] rust: add DropGuard Mohamed Osama
2026-09-26 16:35 ` [PATCH v2 1/5] rust: add DropGuard KUnit test configuration Mohamed Osama
2026-09-26 16:35 ` [PATCH v2 2/5] rust: mem: add DropGuard Mohamed Osama
@ 2026-09-26 16:35 ` Mohamed Osama
2026-09-26 16:42 ` sashiko-bot
2026-09-26 16:35 ` [PATCH v2 4/5] rust: serdev: " Mohamed Osama
2026-09-26 16:35 ` [PATCH v2 5/5] rust: sync: lock: " Mohamed Osama
4 siblings, 1 reply; 11+ messages in thread
From: Mohamed Osama @ 2026-09-26 16:35 UTC (permalink / raw)
To: ojeda
Cc: boqun, gary, bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross,
dakr, daniel.almeida, tamird, acourbot, work, longman, lyude,
linux-block, linux-serial, rust-for-linux, linux-kernel
Replace the ScopeGuard instances in the Rust block layer generic disk
implementation with DropGuard.
DropGuard provides the same scope-exit cleanup behavior while using the
new Rust kernel memory API.
Signed-off-by: Mohamed Osama <mohamed.osama189110@gmail.com>
---
rust/kernel/block/mq/gen_disk.rs | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/rust/kernel/block/mq/gen_disk.rs b/rust/kernel/block/mq/gen_disk.rs
index fc97dd873974..d9019fbbb361 100644
--- a/rust/kernel/block/mq/gen_disk.rs
+++ b/rust/kernel/block/mq/gen_disk.rs
@@ -10,11 +10,12 @@
block::mq::{Operations, TagSet},
error::{self, from_err_ptr, Result},
fmt::{self, Write},
+ mem::DropGuard,
prelude::*,
static_lock_class,
str::NullTerminatedFormatter,
sync::Arc,
- types::{ForeignOwnable, ScopeGuard},
+ types::ForeignOwnable,
};
/// A builder for [`GenDisk`].
@@ -102,7 +103,7 @@ pub fn build<T: Operations>(
queue_data: T::QueueData,
) -> Result<GenDisk<T>> {
let data = queue_data.into_foreign();
- let recover_data = ScopeGuard::new(|| {
+ let recover_data = DropGuard::new((), |_| {
// SAFETY: T::QueueData was created by the call to `into_foreign()` above
drop(unsafe { T::QueueData::from_foreign(data) });
});
@@ -150,7 +151,7 @@ pub fn build<T: Operations>(
// SAFETY: `gendisk` is a valid pointer as we initialized it above
unsafe { (*gendisk).fops = &TABLE };
- let cleanup_failure = ScopeGuard::new_with_data((gendisk, data), |(gendisk, data)| {
+ let cleanup_failure = DropGuard::new((gendisk, data), |(gendisk, data)| {
// SAFETY: `gendisk` came from `__blk_mq_alloc_disk()` above and
// has not been added to the VFS on this cleanup path.
unsafe { bindings::put_disk(gendisk) };
@@ -161,7 +162,7 @@ pub fn build<T: Operations>(
// The failure guard now owns both pieces of cleanup; the early guard
// must not run on this path anymore.
- recover_data.dismiss();
+ DropGuard::dismiss(recover_data);
let mut writer = NullTerminatedFormatter::new(
// SAFETY: `gendisk` points to a valid and initialized instance. We
@@ -185,7 +186,7 @@ pub fn build<T: Operations>(
},
)?;
- cleanup_failure.dismiss();
+ DropGuard::dismiss(cleanup_failure);
// INVARIANT: `gendisk` was initialized above.
// INVARIANT: `gendisk` was added to the VFS via `device_add_disk` above.
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 4/5] rust: serdev: use DropGuard
2026-09-26 16:35 [PATCH v2 0/5] rust: add DropGuard Mohamed Osama
` (2 preceding siblings ...)
2026-09-26 16:35 ` [PATCH v2 3/5] rust: block: gen_disk: use DropGuard Mohamed Osama
@ 2026-09-26 16:35 ` Mohamed Osama
2026-09-26 16:41 ` sashiko-bot
2026-09-26 16:35 ` [PATCH v2 5/5] rust: sync: lock: " Mohamed Osama
4 siblings, 1 reply; 11+ messages in thread
From: Mohamed Osama @ 2026-09-26 16:35 UTC (permalink / raw)
To: ojeda
Cc: boqun, gary, bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross,
dakr, daniel.almeida, tamird, acourbot, work, longman, lyude,
linux-block, linux-serial, rust-for-linux, linux-kernel
Replace the ScopeGuard usage in the serial device bus implementation
with DropGuard.
Use DropGuard::dismiss() when ownership of the private data needs to be
transferred without running the cleanup callback.
Signed-off-by: Mohamed Osama <mohamed.osama189110@gmail.com>
---
rust/kernel/serdev.rs | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/rust/kernel/serdev.rs b/rust/kernel/serdev.rs
index 17ca504b7f8d..dd43b159b461 100644
--- a/rust/kernel/serdev.rs
+++ b/rust/kernel/serdev.rs
@@ -13,6 +13,7 @@
to_result,
VTABLE_DEFAULT_ERROR, //
},
+ mem::DropGuard,
new_mutex,
of,
prelude::*,
@@ -21,10 +22,7 @@
Mutex, //
},
time::Jiffies,
- types::{
- Opaque,
- ScopeGuard, //
- }, //
+ types::Opaque, //
};
use core::{
@@ -174,7 +172,7 @@ extern "C" fn probe_callback(sdev: *mut bindings::serdev_device) -> kernel::ffi:
}))?;
// SAFETY: We just set drvdata to `PrivateData<'_, T>`.
let private_data = unsafe { sdev.as_ref().drvdata_borrow::<PrivateData<'_, T>>() };
- let private_data = ScopeGuard::new_with_data(private_data, |_| {
+ let private_data = DropGuard::new(private_data, |_| {
// SAFETY: We just set drvdata to `PrivateData<'_, T>`.
drop(unsafe { sdev.as_ref().drvdata_obtain::<PrivateData<'_, T>>() });
});
@@ -204,7 +202,7 @@ extern "C" fn probe_callback(sdev: *mut bindings::serdev_device) -> kernel::ffi:
drop(active);
result.map(|()| {
- private_data.dismiss();
+ DropGuard::dismiss(private_data);
0
})
})
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 5/5] rust: sync: lock: use DropGuard
2026-09-26 16:35 [PATCH v2 0/5] rust: add DropGuard Mohamed Osama
` (3 preceding siblings ...)
2026-09-26 16:35 ` [PATCH v2 4/5] rust: serdev: " Mohamed Osama
@ 2026-09-26 16:35 ` Mohamed Osama
2026-09-26 16:41 ` sashiko-bot
4 siblings, 1 reply; 11+ messages in thread
From: Mohamed Osama @ 2026-09-26 16:35 UTC (permalink / raw)
To: ojeda
Cc: boqun, gary, bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross,
dakr, daniel.almeida, tamird, acourbot, work, longman, lyude,
linux-block, linux-serial, rust-for-linux, linux-kernel
Replace the ScopeGuard usage in the Rust locking implementation with
DropGuard.
The guard preserves the existing scope-exit cleanup behavior while using
the DropGuard API from the Rust kernel memory module.
Signed-off-by: Mohamed Osama <mohamed.osama189110@gmail.com>
---
rust/kernel/sync/lock.rs | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/rust/kernel/sync/lock.rs b/rust/kernel/sync/lock.rs
index 10b6b5e9b024..15f9cbe76c8d 100644
--- a/rust/kernel/sync/lock.rs
+++ b/rust/kernel/sync/lock.rs
@@ -7,8 +7,9 @@
use super::LockClassKey;
use crate::{
+ mem::DropGuard,
str::{CStr, CStrExt as _},
- types::{NotThreadSafe, Opaque, ScopeGuard},
+ types::{NotThreadSafe, Opaque},
};
use core::{cell::UnsafeCell, marker::PhantomPinned, pin::Pin};
use pin_init::{pin_data, pin_init, PinInit, Wrapper};
@@ -242,7 +243,7 @@ pub(crate) fn do_unlocked<U>(&mut self, cb: impl FnOnce() -> U) -> U {
// SAFETY: The caller owns the lock, so it is safe to unlock it.
unsafe { B::unlock(self.lock.state.get(), &self.state) };
- let _relock = ScopeGuard::new(||
+ let _relock = DropGuard::new((), |_|
// SAFETY: The lock was just unlocked above and is being relocked now.
unsafe { B::relock(self.lock.state.get(), &mut self.state) });
--
2.43.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH v2 1/5] rust: add DropGuard KUnit test configuration
2026-09-26 16:35 ` [PATCH v2 1/5] rust: add DropGuard KUnit test configuration Mohamed Osama
@ 2026-09-26 16:41 ` sashiko-bot
0 siblings, 0 replies; 11+ messages in thread
From: sashiko-bot @ 2026-09-26 16:41 UTC (permalink / raw)
To: Mohamed Osama; +Cc: gary, linux-serial, ojeda
> Add a KUnit configuration option for testing the Rust DropGuard API.
>
> The option follows the existing Rust KUnit test configuration pattern and
> defaults to KUNIT_ALL_TESTS.
>
> Signed-off-by: Mohamed Osama <mohamed.osama189110@gmail.com>
Sashiko has reviewed this patch and found no issues. It looks great!
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260926163551.52371-1-mohamed.osama189110@gmail.com?part=1
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 5/5] rust: sync: lock: use DropGuard
2026-09-26 16:35 ` [PATCH v2 5/5] rust: sync: lock: " Mohamed Osama
@ 2026-09-26 16:41 ` sashiko-bot
0 siblings, 0 replies; 11+ messages in thread
From: sashiko-bot @ 2026-09-26 16:41 UTC (permalink / raw)
To: Mohamed Osama; +Cc: gary, ojeda, linux-serial
> Replace the ScopeGuard usage in the Rust locking implementation with
> DropGuard.
>
> The guard preserves the existing scope-exit cleanup behavior while using
> the DropGuard API from the Rust kernel memory module.
>
> Signed-off-by: Mohamed Osama <mohamed.osama189110@gmail.com>
Sashiko has reviewed this patch and found no issues. It looks great!
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260926163551.52371-1-mohamed.osama189110@gmail.com?part=5
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 4/5] rust: serdev: use DropGuard
2026-09-26 16:35 ` [PATCH v2 4/5] rust: serdev: " Mohamed Osama
@ 2026-09-26 16:41 ` sashiko-bot
0 siblings, 0 replies; 11+ messages in thread
From: sashiko-bot @ 2026-09-26 16:41 UTC (permalink / raw)
To: Mohamed Osama; +Cc: gary, linux-serial, ojeda
> Replace the ScopeGuard usage in the serial device bus implementation
> with DropGuard.
>
> Use DropGuard::dismiss() when ownership of the private data needs to be
> transferred without running the cleanup callback.
>
> Signed-off-by: Mohamed Osama <mohamed.osama189110@gmail.com>
Sashiko has reviewed this patch and found no issues. It looks great!
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260926163551.52371-1-mohamed.osama189110@gmail.com?part=4
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 3/5] rust: block: gen_disk: use DropGuard
2026-09-26 16:35 ` [PATCH v2 3/5] rust: block: gen_disk: use DropGuard Mohamed Osama
@ 2026-09-26 16:42 ` sashiko-bot
0 siblings, 0 replies; 11+ messages in thread
From: sashiko-bot @ 2026-09-26 16:42 UTC (permalink / raw)
To: Mohamed Osama; +Cc: ojeda, linux-serial, gary
> Replace the ScopeGuard instances in the Rust block layer generic disk
> implementation with DropGuard.
>
> DropGuard provides the same scope-exit cleanup behavior while using the
> new Rust kernel memory API.
>
> Signed-off-by: Mohamed Osama <mohamed.osama189110@gmail.com>
Sashiko has reviewed this patch and found no issues. It looks great!
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260926163551.52371-1-mohamed.osama189110@gmail.com?part=3
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 2/5] rust: mem: add DropGuard
2026-09-26 16:35 ` [PATCH v2 2/5] rust: mem: add DropGuard Mohamed Osama
@ 2026-09-26 16:46 ` sashiko-bot
0 siblings, 0 replies; 11+ messages in thread
From: sashiko-bot @ 2026-09-26 16:46 UTC (permalink / raw)
To: Mohamed Osama; +Cc: gary, ojeda, linux-serial
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] rust: DropGuard duplicates ScopeGuard without justification
- [Low] rust: vertical import style violation in mem.rs
--
commit 5eee6691ffc9502aec33891dcbc8c9eb698eb03a
Author: Mohamed Osama <mohamed.osama189110@gmail.com>
rust: mem: add DropGuard
This commit introduces DropGuard to the Rust kernel memory module to run a
cleanup callback upon dropping. It provides a scope guard API that includes
a dismiss method to take ownership without running the cleanup.
> diff --git a/rust/kernel/mem.rs b/rust/kernel/mem.rs
> index f2d4cdf87d00b..17807c8e67ac0 100644
> --- a/rust/kernel/mem.rs
> +++ b/rust/kernel/mem.rs
> @@ -4,6 +4,95 @@
>
> use crate::prelude::*;
>
> +use core::{
> + mem::ManuallyDrop,
> + ops::{Deref, DerefMut},
> +};
[Severity: Low]
Is this a regression in code style? The Rust subsystem guide requires one
import per line without nested braces for non-vendored crates, but nested
groups are used here for the core module imports.
> +
> +/// Wraps a value and runs a closure when dropped.
> +///
> +/// This is useful for running cleanup code when leaving a scope.
> +///
> +/// The [`DropGuard::dismiss`] function can be used to take ownership of the wrapped
> +/// value without running the cleanup function.
> +#[doc(alias = "ScopeGuard")]
> +#[doc(alias = "defer")]
> +pub struct DropGuard<T, F>
> +where
> + F: FnOnce(T),
[Severity: Medium]
Does this introduce an API regression by duplicating the functionality of the
existing kernel::types::ScopeGuard? Both handle scope guarding via closures
and provide a dismiss method.
The commit message mentions an upstream Rust DropGuard interface, but this
does not seem to exist in standard Rust. If the intention is to avoid Option
overhead in ScopeGuard by using ManuallyDrop, could the existing ScopeGuard
be refactored instead to prevent unnecessary code duplication and API
fragmentation?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260926163551.52371-1-mohamed.osama189110@gmail.com?part=2
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2026-09-26 16:46 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-26 16:35 [PATCH v2 0/5] rust: add DropGuard Mohamed Osama
2026-09-26 16:35 ` [PATCH v2 1/5] rust: add DropGuard KUnit test configuration Mohamed Osama
2026-09-26 16:41 ` sashiko-bot
2026-09-26 16:35 ` [PATCH v2 2/5] rust: mem: add DropGuard Mohamed Osama
2026-09-26 16:46 ` sashiko-bot
2026-09-26 16:35 ` [PATCH v2 3/5] rust: block: gen_disk: use DropGuard Mohamed Osama
2026-09-26 16:42 ` sashiko-bot
2026-09-26 16:35 ` [PATCH v2 4/5] rust: serdev: " Mohamed Osama
2026-09-26 16:41 ` sashiko-bot
2026-09-26 16:35 ` [PATCH v2 5/5] rust: sync: lock: " Mohamed Osama
2026-09-26 16:41 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox