summaryrefslogtreecommitdiff
path: root/rust/kernel/maple_tree.rs
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-01-19 10:24:11 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2026-01-19 10:24:11 +0100
commit5ac87cd859eca21ebf657d94affd29f40003bede (patch)
tree7323330be011e06131e279c0c108b59f94d70a2d /rust/kernel/maple_tree.rs
parentfa3bb5011f33cccd246072954e64d64483d0d774 (diff)
parent24d479d26b25bce5faea3ddd9fa8f3a6c3129ea7 (diff)
Merge 6.19-rc6 usb-next
We need the USB fixes in here as well. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'rust/kernel/maple_tree.rs')
-rw-r--r--rust/kernel/maple_tree.rs11
1 files changed, 10 insertions, 1 deletions
diff --git a/rust/kernel/maple_tree.rs b/rust/kernel/maple_tree.rs
index e72eec56bf57..265d6396a78a 100644
--- a/rust/kernel/maple_tree.rs
+++ b/rust/kernel/maple_tree.rs
@@ -265,7 +265,16 @@ impl<T: ForeignOwnable> MapleTree<T> {
loop {
// This uses the raw accessor because we're destroying pointers without removing them
// from the maple tree, which is only valid because this is the destructor.
- let ptr = ma_state.mas_find_raw(usize::MAX);
+ //
+ // Take the rcu lock because mas_find_raw() requires that you hold either the spinlock
+ // or the rcu read lock. This is only really required if memory reclaim might
+ // reallocate entries in the tree, as we otherwise have exclusive access. That feature
+ // doesn't exist yet, so for now, taking the rcu lock only serves the purpose of
+ // silencing lockdep.
+ let ptr = {
+ let _rcu = kernel::sync::rcu::Guard::new();
+ ma_state.mas_find_raw(usize::MAX)
+ };
if ptr.is_null() {
break;
}