From: Alice Ryhl <aliceryhl@google.com>
To: Danilo Krummrich <dakr@kernel.org>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
"Lorenzo Stoakes" <lorenzo.stoakes@oracle.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Andrew Ballance" <andrewjballance@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
linux-kernel@vger.kernel.org, maple-tree@lists.infradead.org,
rust-for-linux@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH v2 2/5] rust: maple_tree: add MapleTree
Date: Tue, 19 Aug 2025 12:45:39 +0000 [thread overview]
Message-ID: <aKRx8xsY8CpzbeEm@google.com> (raw)
In-Reply-To: <DC6DC244ZIUL.304JSP7JFDE9Z@kernel.org>
On Tue, Aug 19, 2025 at 01:30:30PM +0200, Danilo Krummrich wrote:
> On Tue Aug 19, 2025 at 12:34 PM CEST, Alice Ryhl wrote:
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index fe168477caa45799dfe07de2f54de6d6a1ce0615..26053163fe5aed2fc4b4e39d47062c93b873ac13 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -16250,7 +16250,9 @@ L: rust-for-linux@vger.kernel.org
> > S: Maintained
> > W: http://www.linux-mm.org
> > T: git git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
> > +F: rust/helpers/maple_tree.c
> > F: rust/helpers/mm.c
> > +F: rust/kernel/maple_tree.rs
> > F: rust/kernel/mm.rs
> > F: rust/kernel/mm/
>
> A later patch adds a separate entry; is this intended?
Ah, no, this isn't intended.
> > +impl<T: ForeignOwnable> MapleTree<T> {
> > + /// Create a new maple tree.
> > + ///
> > + /// The tree will use the regular implementation with a higher branching factor.
>
> What do you mean with "regular implementation" and what is "a higher branching
> factor" in this context?
>
> Do you mean that the maple tree has a higher branching factor than a regular RB
> tree, or something else?
This is compared to the alloc variant of the maple tree from the last
patch in this series.
> > + #[inline]
> > + pub fn new() -> impl PinInit<Self> {
> > + pin_init!(MapleTree {
> > + // SAFETY: This initializes a maple tree into a pinned slot. The maple tree will be
> > + // destroyed in Drop before the memory location becomes invalid.
> > + tree <- Opaque::ffi_init(|slot| unsafe { bindings::mt_init_flags(slot, 0) }),
> > + _p: PhantomData,
> > + })
> > + }
> > +
> > + /// Insert the value at the given index.
> > + ///
> > + /// If the maple tree already contains a range using the given index, then this call will fail.
>
> Maybe add an error section for this?
>
> > + ///
> > + /// # Examples
> > + ///
> > + /// ```
> > + /// use kernel::maple_tree::{MapleTree, InsertErrorKind};
> > + ///
> > + /// let tree = KBox::pin_init(MapleTree::<KBox<i32>>::new(), GFP_KERNEL)?;
> > + ///
> > + /// let ten = KBox::new(10, GFP_KERNEL)?;
> > + /// let twenty = KBox::new(20, GFP_KERNEL)?;
> > + /// let the_answer = KBox::new(42, GFP_KERNEL)?;
> > + ///
> > + /// // These calls will succeed.
> > + /// tree.insert(100, ten, GFP_KERNEL)?;
> > + /// tree.insert(101, twenty, GFP_KERNEL)?;
> > + ///
> > + /// // This will fail because the index is already in use.
> > + /// assert_eq!(
> > + /// tree.insert(100, the_answer, GFP_KERNEL).unwrap_err().cause,
>
> A lot of the examples, including the ones in subsequent patches contain variants
> of unwrap().
>
> I think we should avoid this and instead handle errors gracefully -- even if it
> bloats the examples a bit.
>
> My concern is that it otherwise creates the impression that using unwrap() is a
> reasonable thing to do.
>
> Especially for people new to the kernel or Rust (or both) it might not be
> obvious that unwrap() is equivalent to
>
> if (!ret)
> do_something();
> else
> panic();
>
> or the fact that this is something we should only do as absolute last resort.
How would you write it? The way you write it in normal code is an
if/else where you handle both cases, but that doesn't map nicely.
Alice
next prev parent reply other threads:[~2025-08-19 12:45 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-19 10:34 [PATCH v2 0/5] Add Rust abstraction for Maple Trees Alice Ryhl
2025-08-19 10:34 ` [PATCH v2 1/5] maple_tree: remove lockdep_map_p typedef Alice Ryhl
2025-08-19 10:49 ` Danilo Krummrich
2025-08-19 12:41 ` Alice Ryhl
2025-08-19 10:34 ` [PATCH v2 2/5] rust: maple_tree: add MapleTree Alice Ryhl
2025-08-19 11:30 ` Danilo Krummrich
2025-08-19 12:45 ` Alice Ryhl [this message]
2025-08-19 12:58 ` Danilo Krummrich
2025-08-22 1:40 ` Miguel Ojeda
2025-08-22 11:05 ` Danilo Krummrich
2025-08-22 11:26 ` Miguel Ojeda
2025-08-22 11:44 ` Danilo Krummrich
2025-08-22 21:22 ` Miguel Ojeda
2025-08-22 21:49 ` Danilo Krummrich
2025-08-24 12:00 ` Miguel Ojeda
2025-08-19 16:34 ` Daniel Almeida
2025-08-19 10:34 ` [PATCH v2 3/5] rust: maple_tree: add MapleTree::lock() and load() Alice Ryhl
2025-08-19 11:36 ` Danilo Krummrich
2025-08-19 17:07 ` Daniel Almeida
2025-08-19 17:22 ` Daniel Almeida
2025-08-22 15:31 ` Liam R. Howlett
2025-08-22 15:43 ` Daniel Almeida
2025-08-19 10:34 ` [PATCH v2 4/5] rust: maple_tree: add MapleTreeAlloc Alice Ryhl
2025-08-19 11:38 ` Danilo Krummrich
2025-08-19 17:26 ` Daniel Almeida
2025-08-19 10:34 ` [PATCH v2 5/5] rust: maple_tree: add MAINTAINERS entry Alice Ryhl
2025-08-19 11:49 ` Danilo Krummrich
2025-08-19 12:47 ` Alice Ryhl
2025-08-19 13:36 ` Liam R. Howlett
2025-08-19 17:53 ` Danilo Krummrich
2025-08-25 12:30 ` Alice Ryhl
2025-08-19 20:53 ` Andrew Ballance
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aKRx8xsY8CpzbeEm@google.com \
--to=aliceryhl@google.com \
--cc=Liam.Howlett@oracle.com \
--cc=a.hindborg@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=andrewjballance@gmail.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=lossin@kernel.org \
--cc=maple-tree@lists.infradead.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.