Skip to content

Commit c0092da

Browse files
nbdd0121jannau
authored andcommitted
rust: make Arc::into_unique_or_drop associated function
Make `Arc::into_unique_or_drop` to become a mere associated function instead of a method (i.e. removing the `self` receiver). It's a general convention for Rust smart pointers to avoid having methods defined on them, because if the pointee type has a method of the same name, then it is shadowed. This is normally for avoiding semver breakage, which isn't an issue for kernel codebase, but it's still generally a good practice to follow this rule, so that `ptr.foo()` would always be calling a method on the pointee type. Signed-off-by: Gary Guo <gary@garyguo.net> Signed-off-by: Boqun Feng <boqun.feng@gmail.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Benno Lossin <lossin@kernel.org> Reviewed-by: Alexandre Courbot <acourbot@nvidia.com> Reviewed-by: Elle Rhumsaa <elle@weathered-steel.dev> Link: https://lore.kernel.org/r/20250723233312.3304339-3-gary@kernel.org
1 parent 816eabd commit c0092da

1 file changed

Lines changed: 6 additions & 6 deletions

File tree

rust/kernel/sync/arc.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ impl<T: ?Sized> Arc<T> {
321321
/// use kernel::sync::{Arc, UniqueArc};
322322
///
323323
/// let arc = Arc::new(42, GFP_KERNEL)?;
324-
/// let unique_arc = arc.into_unique_or_drop();
324+
/// let unique_arc = Arc::into_unique_or_drop(arc);
325325
///
326326
/// // The above conversion should succeed since refcount of `arc` is 1.
327327
/// assert!(unique_arc.is_some());
@@ -337,18 +337,18 @@ impl<T: ?Sized> Arc<T> {
337337
/// let arc = Arc::new(42, GFP_KERNEL)?;
338338
/// let another = arc.clone();
339339
///
340-
/// let unique_arc = arc.into_unique_or_drop();
340+
/// let unique_arc = Arc::into_unique_or_drop(arc);
341341
///
342342
/// // The above conversion should fail since refcount of `arc` is >1.
343343
/// assert!(unique_arc.is_none());
344344
///
345345
/// # Ok::<(), Error>(())
346346
/// ```
347-
pub fn into_unique_or_drop(self) -> Option<Pin<UniqueArc<T>>> {
347+
pub fn into_unique_or_drop(this: Self) -> Option<Pin<UniqueArc<T>>> {
348348
// We will manually manage the refcount in this method, so we disable the destructor.
349-
let me = ManuallyDrop::new(self);
349+
let this = ManuallyDrop::new(this);
350350
// SAFETY: We own a refcount, so the pointer is still valid.
351-
let refcount = unsafe { me.ptr.as_ref() }.refcount.get();
351+
let refcount = unsafe { this.ptr.as_ref() }.refcount.get();
352352

353353
// If the refcount reaches a non-zero value, then we have destroyed this `Arc` and will
354354
// return without further touching the `Arc`. If the refcount reaches zero, then there are
@@ -365,7 +365,7 @@ impl<T: ?Sized> Arc<T> {
365365
// must pin the `UniqueArc` because the values was previously in an `Arc`, and they pin
366366
// their values.
367367
Some(Pin::from(UniqueArc {
368-
inner: ManuallyDrop::into_inner(me),
368+
inner: ManuallyDrop::into_inner(this),
369369
}))
370370
} else {
371371
None

0 commit comments

Comments
 (0)