All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Suren Baghdasaryan <surenb@google.com>
Cc: akpm@linux-foundation.org, willy@infradead.org,
	liam.howlett@oracle.com, lorenzo.stoakes@oracle.com,
	mhocko@suse.com, vbabka@suse.cz, hannes@cmpxchg.org,
	mjguzik@gmail.com, oliver.sang@intel.com,
	mgorman@techsingularity.net, david@redhat.com, peterx@redhat.com,
	oleg@redhat.com, dave@stgolabs.net, paulmck@kernel.org,
	brauner@kernel.org, dhowells@redhat.com, hdanton@sina.com,
	hughd@google.com, lokeshgidra@google.com, minchan@google.com,
	jannh@google.com, shakeel.butt@linux.dev, souravpanda@google.com,
	pasha.tatashin@soleen.com, klarasmodin@gmail.com, corbet@lwn.net,
	linux-doc@vger.kernel.org, linux-mm@kvack.org,
	linux-kernel@vger.kernel.org, kernel-team@android.com
Subject: Re: [PATCH v6 13/16] mm: introduce vma_ensure_detached()
Date: Tue, 17 Dec 2024 11:26:20 +0100	[thread overview]
Message-ID: <20241217102620.GC11133@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <20241216192419.2970941-14-surenb@google.com>

On Mon, Dec 16, 2024 at 11:24:16AM -0800, Suren Baghdasaryan wrote:
> vma_start_read() can temporarily raise vm_refcnt of a write-locked and
> detached vma:
> 
> // vm_refcnt==1 (attached)
> vma_start_write()
>     vma->vm_lock_seq = mm->mm_lock_seq
> 
>                     vma_start_read()
>                        vm_refcnt++; // vm_refcnt==2
> 
> vma_mark_detached()
>     vm_refcnt--; // vm_refcnt==1
> 
> // vma is detached but vm_refcnt!=0 temporarily
> 
>                        if (vma->vm_lock_seq == mm->mm_lock_seq)
>                            vma_refcount_put()
>                                vm_refcnt--; // vm_refcnt==0
> 
> This is currently not a problem when freeing the vma because RCU grace
> period should pass before kmem_cache_free(vma) gets called and by that
> time vma_start_read() should be done and vm_refcnt is 0. However once
> we introduce possibility of vma reuse before RCU grace period is over,
> this will become a problem (reused vma might be in non-detached state).
> Introduce vma_ensure_detached() for the writer to wait for readers until
> they exit vma_start_read().

So aside from the lockdep problem (which I think is fixable), the normal
way to fix the above is to make dec_and_test() do the kmem_cache_free().

Then the last user does the free and everything just works.

  reply	other threads:[~2024-12-17 10:26 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-16 19:24 [PATCH v6 00/16] move per-vma lock into vm_area_struct Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 01/16] mm: introduce vma_start_read_locked{_nested} helpers Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 02/16] mm: move per-vma lock into vm_area_struct Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 03/16] mm: mark vma as detached until it's added into vma tree Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 04/16] mm/nommu: fix the last places where vma is not locked before being attached Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 05/16] types: move struct rcuwait into types.h Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 06/16] mm: allow vma_start_read_locked/vma_start_read_locked_nested to fail Suren Baghdasaryan
2024-12-17 11:31   ` Lokesh Gidra
2024-12-17 15:51     ` Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 07/16] mm: move mmap_init_lock() out of the header file Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 08/16] mm: uninline the main body of vma_start_write() Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 09/16] refcount: introduce __refcount_{add|inc}_not_zero_limited Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 10/16] mm: replace vm_lock and detached flag with a reference count Suren Baghdasaryan
2024-12-16 20:42   ` Peter Zijlstra
2024-12-16 20:53     ` Suren Baghdasaryan
2024-12-16 21:15   ` Peter Zijlstra
2024-12-16 21:53     ` Suren Baghdasaryan
2024-12-16 22:00       ` Peter Zijlstra
2024-12-16 21:37   ` Peter Zijlstra
2024-12-16 21:44     ` Suren Baghdasaryan
2024-12-17 10:30       ` Peter Zijlstra
2024-12-17 16:27         ` Suren Baghdasaryan
2024-12-18  9:41           ` Peter Zijlstra
2024-12-18 10:06             ` Peter Zijlstra
2024-12-18 15:37               ` Liam R. Howlett
2024-12-18 15:50                 ` Suren Baghdasaryan
2024-12-18 16:18                   ` Peter Zijlstra
2024-12-18 17:36                     ` Suren Baghdasaryan
2024-12-18 17:44                       ` Peter Zijlstra
2024-12-18 17:58                         ` Suren Baghdasaryan
2024-12-18 19:00                           ` Liam R. Howlett
2024-12-18 19:07                             ` Suren Baghdasaryan
2024-12-18 19:29                               ` Suren Baghdasaryan
2024-12-18 19:38                                 ` Liam R. Howlett
2024-12-18 20:00                                   ` Suren Baghdasaryan
2024-12-18 20:38                                     ` Liam R. Howlett
2024-12-18 21:53                                       ` Suren Baghdasaryan
2024-12-18 21:55                                         ` Suren Baghdasaryan
2024-12-19  0:35                                         ` Andrew Morton
2024-12-19  0:47                                           ` Suren Baghdasaryan
2024-12-19  9:13                                         ` Peter Zijlstra
2024-12-19 11:20                                           ` Peter Zijlstra
2024-12-19 16:17                                             ` Suren Baghdasaryan
2024-12-19 17:16                                             ` Liam R. Howlett
2024-12-19 17:42                                               ` Peter Zijlstra
2024-12-19 18:18                                                 ` Liam R. Howlett
2024-12-19 18:46                                                   ` Peter Zijlstra
2024-12-19 18:55                                                     ` Liam R. Howlett
2024-12-20 15:22                                                       ` Suren Baghdasaryan
2024-12-23  3:03                                                       ` Suren Baghdasaryan
2024-12-26 17:12                                                         ` Suren Baghdasaryan
2024-12-19 16:14                                           ` Suren Baghdasaryan
2024-12-19 17:23                                             ` Peter Zijlstra
2024-12-19  8:55                                 ` Peter Zijlstra
2024-12-19 16:08                                   ` Suren Baghdasaryan
2024-12-19  8:53                           ` Peter Zijlstra
2024-12-19 16:08                             ` Suren Baghdasaryan
2024-12-18 15:57                 ` Suren Baghdasaryan
2024-12-18 16:13                 ` Peter Zijlstra
2024-12-18 15:42             ` Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 11/16] mm: enforce vma to be in detached state before freeing Suren Baghdasaryan
2024-12-16 21:16   ` Peter Zijlstra
2024-12-16 21:18     ` Peter Zijlstra
2024-12-16 21:57       ` Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 12/16] mm: remove extra vma_numab_state_init() call Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 13/16] mm: introduce vma_ensure_detached() Suren Baghdasaryan
2024-12-17 10:26   ` Peter Zijlstra [this message]
2024-12-17 15:58     ` Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 14/16] mm: prepare lock_vma_under_rcu() for vma reuse possibility Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 15/16] mm: make vma cache SLAB_TYPESAFE_BY_RCU Suren Baghdasaryan
2024-12-16 19:24 ` [PATCH v6 16/16] docs/mm: document latest changes to vm_lock Suren Baghdasaryan
2024-12-16 19:39 ` [PATCH v6 00/16] move per-vma lock into vm_area_struct Suren Baghdasaryan
2024-12-17 18:42   ` Andrew Morton
2024-12-17 18:49     ` Suren Baghdasaryan

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=20241217102620.GC11133@noisy.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=akpm@linux-foundation.org \
    --cc=brauner@kernel.org \
    --cc=corbet@lwn.net \
    --cc=dave@stgolabs.net \
    --cc=david@redhat.com \
    --cc=dhowells@redhat.com \
    --cc=hannes@cmpxchg.org \
    --cc=hdanton@sina.com \
    --cc=hughd@google.com \
    --cc=jannh@google.com \
    --cc=kernel-team@android.com \
    --cc=klarasmodin@gmail.com \
    --cc=liam.howlett@oracle.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lokeshgidra@google.com \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=mgorman@techsingularity.net \
    --cc=mhocko@suse.com \
    --cc=minchan@google.com \
    --cc=mjguzik@gmail.com \
    --cc=oleg@redhat.com \
    --cc=oliver.sang@intel.com \
    --cc=pasha.tatashin@soleen.com \
    --cc=paulmck@kernel.org \
    --cc=peterx@redhat.com \
    --cc=shakeel.butt@linux.dev \
    --cc=souravpanda@google.com \
    --cc=surenb@google.com \
    --cc=vbabka@suse.cz \
    --cc=willy@infradead.org \
    /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.