Thread (33 messages) 33 messages, 7 authors, 2026-06-16

Re: [PATCH v2 1/5] mm: Make per-VMA locks available universally

From: Alice Ryhl <aliceryhl@google.com>
Date: 2026-06-16 07:32:55
Also in: lkml

On Wed, Jun 10, 2026 at 04:04:11PM -0700, Dave Hansen wrote:
quoted hunk ↗ jump to hunk
--- a/rust/kernel/mm.rs~unconditional-vma-locks	2026-06-10 15:57:54.051368539 -0700
+++ b/rust/kernel/mm.rs	2026-06-10 15:57:54.078369499 -0700
@@ -174,7 +174,6 @@ impl MmWithUser {
     /// When per-vma locks are disabled, this always returns `None`.
     #[inline]
     pub fn lock_vma_under_rcu(&self, vma_addr: usize) -> Option<VmaReadGuard<'_>> {
-        #[cfg(CONFIG_PER_VMA_LOCK)]
         {
             // SAFETY: Calling `bindings::lock_vma_under_rcu` is always okay given an mm where
             // `mm_users` is non-zero.
@@ -188,12 +187,6 @@ impl MmWithUser {
                 });
             }
         }
-
-        // Silence warnings about unused variables.
-        #[cfg(not(CONFIG_PER_VMA_LOCK))]
-        let _ = vma_addr;
-
-        None
This isn't quite right:

    error[E0317]: `if` may be missing an `else` clause
       --> rust/kernel/mm.rs:181:13
        |
    181 | /             if !vma.is_null() {
    182 | |                 return Some(VmaReadGuard {
    ...   |
    187 | |                 });
    188 | |             }
        | |_____________^ expected `Option<VmaReadGuard<'_>>`, found `()`
        |
        = note:   expected enum `core::option::Option<mm::VmaReadGuard<'_>>`
                found unit type `()`
        = note: `if` expressions without `else` evaluate to `()`
        = help: consider adding an `else` block that evaluates to the expected type

This error is triggered because you deleted the return 'None' at the end
of the function.

I would like to suggest the following implementation

        // SAFETY: Calling `bindings::lock_vma_under_rcu` is always okay given an mm where
        // `mm_users` is non-zero.
        let vma = unsafe { bindings::lock_vma_under_rcu(self.as_raw(), vma_addr) };
        if vma.is_null() {
            return None;
        }
        Some(VmaReadGuard {
            // SAFETY: If `lock_vma_under_rcu` returns a non-null ptr, then it points at a valid
            // vma. The vma is stable for as long as the vma read lock is held.
            vma: unsafe { VmaRef::from_raw(vma) },
            _nts: NotThreadSafe,
        })

Thanks!
Alice
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help