[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <DC5WOFIKX7VQ.30UNUNE37LOO5@kernel.org>
Date: Tue, 19 Aug 2025 00:27:21 +0200
From: "Benno Lossin" <lossin@...nel.org>
To: "Oliver Mangold" <oliver.mangold@...me>, "Andreas Hindborg"
<a.hindborg@...nel.org>
Cc: "Miguel Ojeda" <ojeda@...nel.org>, "Alex Gaynor"
<alex.gaynor@...il.com>, "Boqun Feng" <boqun.feng@...il.com>, "Gary Guo"
<gary@...yguo.net>, Björn Roy Baron
<bjorn3_gh@...tonmail.com>, "Alice Ryhl" <aliceryhl@...gle.com>, "Trevor
Gross" <tmgross@...ch.edu>, "Asahi Lina" <lina+kernel@...hilina.net>,
<rust-for-linux@...r.kernel.org>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v11 1/4] rust: types: Add Ownable/Owned types
On Mon Aug 18, 2025 at 3:04 PM CEST, Oliver Mangold wrote:
> On 250818 1446, Andreas Hindborg wrote:
>> "Oliver Mangold" <oliver.mangold@...me> writes:
>> > +impl<T: OwnableMut> DerefMut for Owned<T> {
>> > + fn deref_mut(&mut self) -> &mut Self::Target {
>> > + // SAFETY: The type invariants guarantee that the object is valid, and that we can safely
>> > + // return a mutable reference to it.
>> > + unsafe { self.ptr.as_mut() }
>> > + }
>> > +}
>>
>> I think someone mentioned this before, but handing out mutable
>> references can be a problem if `T: !Unpin`. For instance, we don't want
>> to hand out `&mut Page` in case of `Owned<Page>`.
>>
>
> That was the reason, why `OwnableMut` was introduced in the first place.
> It's clear, I guess, that as-is it cannot be implemented on many classes.
Yeah the safety requirements ensure that you can't implement it on
`!Unpin` types.
But I'm not sure it's useful then? As you said there aren't many types
that will implement the type then, so how about we change the meaning
and make it give out a pinned mutable reference instead?
> Good question, I have been thinking about it, too. But it might
> be, that it isn't needed at all. As I understand, usually Rust wrappers
> are around non-movable C structs. Do we actually have a useful application
> for OwnableMut?
Also, do we even need two different traits? Which types would only
implement `Ownable` but not `OwnableMut`?
---
Cheers,
Benno
Powered by blists - more mailing lists