On Wed, 17 Mar 2010 13:15:14 +0900 Minchan Kim <minchan.kim@xxxxxxxxx> wrote: > On Wed, Mar 17, 2010 at 12:15 PM, KAMEZAWA Hiroyuki > <kamezawa.hiroyu@xxxxxxxxxxxxxx> wrote: > > On Wed, 17 Mar 2010 12:00:15 +0900 > > Minchan Kim <minchan.kim@xxxxxxxxx> wrote: > > > >> On Wed, Mar 17, 2010 at 11:12 AM, KAMEZAWA Hiroyuki > >> > BTW, I doubt freeing anon_vma can happen even when we check mapcount. > >> > > >> > "unmap" is 2-stage operation. > >> > 1. unmap_vmas() => modify ptes, free pages, etc. > >> > 2. free_pgtables() => free pgtables, unlink vma and free it. > >> > > >> > Then, if migration is enough slow. > >> > > >> > Migration(): Exit(): > >> > check mapcount > >> > rcu_read_lock > >> > pte_lock > >> > replace pte with migration pte > >> > pte_unlock > >> > pte_lock > >> > copy page etc... zap pte (clear pte) > >> > pte_unlock > >> > free_pgtables > >> > ->free vma > >> > ->free anon_vma > >> > pte_lock > >> > remap pte with new pfn(fail) > >> > pte_unlock > >> > > >> > lock anon_vma->lock # modification after free. > >> > check list is empty > >> > >> check list is empty? > >> Do you mean anon_vma->head? > >> > > yes. > > > >> If it is, is it possible that that list isn't empty since anon_vma is > >> used by others due to > >> SLAB_DESTROY_BY_RCU? > >> > > There are 4 cases. > > A) anon_vma->list is not empty because anon_vma is not freed. > > B) anon_vma->list is empty because it's freed. > > C) anon_vma->list is empty but it's reused. > > D) anon_vma->list is not empty but it's reused. > > E) anon_vma is used for other object. > > That's because we don't hold rcu_read_lock. > I think Mel met this E) situation. > Hmm. > AFAIU, even slab page of SLAB_BY_RCU can be freed after grace period. > Do I miss something? > I miss something. Sorry for noise. Maybe we need check page_mapped() before calling try_to_unmap() as vmscan does. Thank you for your help. Thanks, -Kame -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>