Messages in this thread | ![/](/images/icornerl.gif) | | From | Smarduch Mario-CMS063 <> | Subject | RE: Multi-Threaded fork() correctness on Linux 2.4 & 2.6 | Date | Mon, 19 Sep 2005 15:34:39 -0500 |
| |
mmap_sem is also acquired in 2.4 properly. It seemed a little bit too obvious. Thanks for your help!
- mario
-----Original Message----- From: Hugh Dickins [mailto:hugh@veritas.com] Sent: Monday, September 19, 2005 3:14 PM To: Linus Torvalds Cc: Smarduch Mario-CMS063; linux-kernel@vger.kernel.org Subject: Re: Multi-Threaded fork() correctness on Linux 2.4 & 2.6
On Mon, 19 Sep 2005, Linus Torvalds wrote: > > We hold the page_table_lock when doing the fork(), so T2 can't > actually be copying the page until we've done the TLB flush, no? And > once the TLB flush is done, all the writes by T3 should be in the > page, so we copy the right thing at that point, and there is no consistency problems?
I was totally overlooking the page_table_lock during the fork.
But no matter, it's not good enough: src_mm->page_table_lock is acquired and dropped at the inner level, in copy_pte_range (looking at latest 2.6): it cannot be held across allocating page tables for dst_mm.
So each time T1 drops it, there's a window for the T2 vs. T3 problem. Yet we don't much want to flush TLB each time we leave copy_pte_range.
Hugh - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| ![\](/images/icornerr.gif) |