Re: [PATCH 1/7] mm/page_alloc: synchronize get/set pageblock

2014-01-09 Thread Michal Nazarewicz
On Thu, Jan 09 2014, Joonsoo Kim wrote: > @@ -5927,15 +5928,19 @@ unsigned long get_pageblock_flags_group(struct page > *page, > unsigned long pfn, bitidx; > unsigned long flags = 0; > unsigned long value = 1; > + unsigned int seq; > > zone = page_zone(page); >

Re: [PATCH 1/7] mm/page_alloc: synchronize get/set pageblock

2014-01-09 Thread Michal Nazarewicz
On Thu, Jan 09 2014, Joonsoo Kim wrote: @@ -5927,15 +5928,19 @@ unsigned long get_pageblock_flags_group(struct page *page, unsigned long pfn, bitidx; unsigned long flags = 0; unsigned long value = 1; + unsigned int seq; zone = page_zone(page); pfn =

[PATCH 1/7] mm/page_alloc: synchronize get/set pageblock

2014-01-08 Thread Joonsoo Kim
Now get/set pageblock is done without any syncronization. Therefore there is race condition and migratetype can be unintended value. Sometime we move some pageblocks from one migratetype to the other type, and, at the sametime, some page in this pageblock could be freed. In this case, we can get

[PATCH 1/7] mm/page_alloc: synchronize get/set pageblock

2014-01-08 Thread Joonsoo Kim
Now get/set pageblock is done without any syncronization. Therefore there is race condition and migratetype can be unintended value. Sometime we move some pageblocks from one migratetype to the other type, and, at the sametime, some page in this pageblock could be freed. In this case, we can get