On Sun, Jul 01, 2012 at 06:20:13PM +0100, Ben Hutchings wrote: > 3.2-stable review patch. If anyone has any objections, please let me know. > > ------------------ > > From: Pravin B Shelar <[email protected]> > > commit abca7c4965845924f65d40e0aa1092bdd895e314 upstream. > > On arches that do not support this_cpu_cmpxchg_double() slab_lock is used > to do atomic cmpxchg() on double word which contains page->_count. The > page count can be changed from get_page() or put_page() without taking > slab_lock. That corrupts page counter. > > Fix it by moving page->_count out of cmpxchg_double data. So that slub > does no change it while updating slub meta-data in struct page.
Hi, I got a frozen machine on boot with 3.2.22 proposed patches, bisect pointed out to this commit (and reverting only this commit on top of 3.2.22 patches confirmed it). So far I was able to reproduce always. Only happened with an x86_64 kernel, gzipped config attached. Using earlyprintk=vga, I'm able to see the boot process is stuck just right after "Memory: ...k available..." message (right before SLUB prints its initialization message). > > [[email protected]: use standard comment layout, tweak comment text] > Reported-by: Amey Bhide <[email protected]> > Signed-off-by: Pravin B Shelar <[email protected]> > Acked-by: Christoph Lameter <[email protected]> > Cc: Pekka Enberg <[email protected]> > Cc: Andrea Arcangeli <[email protected]> > Signed-off-by: Andrew Morton <[email protected]> > Signed-off-by: Linus Torvalds <[email protected]> > Signed-off-by: Ben Hutchings <[email protected]> > --- > include/linux/mm_types.h | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h > index dad95bd..704a626 100644 > --- a/include/linux/mm_types.h > +++ b/include/linux/mm_types.h > @@ -57,8 +57,18 @@ struct page { > }; > > union { > +#if defined(CONFIG_HAVE_CMPXCHG_DOUBLE) && \ > + defined(CONFIG_HAVE_ALIGNED_STRUCT_PAGE) > /* Used for cmpxchg_double in slub */ > unsigned long counters; > +#else > + /* > + * Keep _count separate from slub cmpxchg_double data. > + * As the rest of the double word is protected by > + * slab_lock but _count is not. > + */ > + unsigned counters; > +#endif > > struct { > > > > -- > To unsubscribe from this list: send the line "unsubscribe stable" in > the body of a message to [email protected] > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- []'s Herton
config-3.2.21-030221-generic.gz
Description: Binary data
