* [PATCH] mm:add VM_BUG_ON() for page_mapcount() [not found] <010b01d012ca$05244060$0f6cc120$@alibaba-inc.com> @ 2014-12-08 9:51 ` Wang, Yalin 2014-12-08 9:58 ` [PATCH V2] " Wang, Yalin 1 sibling, 0 replies; 6+ messages in thread From: Wang, Yalin @ 2014-12-08 9:51 UTC (permalink / raw) To: linux-arm-kernel > -----Original Message----- > From: Hillf Danton [mailto:hillf.zj at alibaba-inc.com] > Sent: Monday, December 08, 2014 5:33 PM > To: Wang, Yalin > Cc: linux-kernel; linux-mm at kvack.org; linux-arm-kernel at lists.infradead.org; > Andrew Morton; Hillf Danton > Subject: Re: [PATCH] mm:add VM_BUG_ON() for page_mapcount() > > > > > This patch add VM_BUG_ON() for slab page, because _mapcount is an > > union with slab struct in struct page, avoid access _mapcount if this > > page is a slab page. > > Also remove the unneeded bracket. > > > > Signed-off-by: Yalin Wang <yalin.wang@sonymobile.com> > > --- > > include/linux/mm.h | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/include/linux/mm.h b/include/linux/mm.h index > > 11b65cf..34124c4 100644 > > --- a/include/linux/mm.h > > +++ b/include/linux/mm.h > > @@ -373,7 +373,8 @@ static inline void reset_page_mapcount(struct page > > *page) > > > > static inline int page_mapcount(struct page *page) { > > - return atomic_read(&(page)->_mapcount) + 1; > > + VM_BUG_ON(PageSlab(page)); > > s/ VM_BUG_ON/ VM_BUG_ON_PAGE/ ? Yes, I will send again . ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH V2] mm:add VM_BUG_ON() for page_mapcount() [not found] <010b01d012ca$05244060$0f6cc120$@alibaba-inc.com> 2014-12-08 9:51 ` [PATCH] mm:add VM_BUG_ON() for page_mapcount() Wang, Yalin @ 2014-12-08 9:58 ` Wang, Yalin 2014-12-08 9:59 ` [PATCH V3] mm:add VM_BUG_ON_PAGE() " Wang, Yalin 1 sibling, 1 reply; 6+ messages in thread From: Wang, Yalin @ 2014-12-08 9:58 UTC (permalink / raw) To: linux-arm-kernel This patch add VM_BUG_ON_PAGE() for slab page, because _mapcount is an union with slab struct in struct page, avoid access _mapcount if this page is a slab page. Also remove the unneeded bracket. Signed-off-by: Yalin Wang <yalin.wang@sonymobile.com> --- include/linux/mm.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index b464611..a117527 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -449,7 +449,8 @@ static inline void page_mapcount_reset(struct page *page) static inline int page_mapcount(struct page *page) { - return atomic_read(&(page)->_mapcount) + 1; + VM_BUG_ON_PAGE(PageSlab(page), page); + return atomic_read(&page->_mapcount) + 1; } static inline int page_count(struct page *page) -- 2.1.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH V3] mm:add VM_BUG_ON_PAGE() for page_mapcount() 2014-12-08 9:58 ` [PATCH V2] " Wang, Yalin @ 2014-12-08 9:59 ` Wang, Yalin 2014-12-08 11:54 ` Kirill A. Shutemov ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Wang, Yalin @ 2014-12-08 9:59 UTC (permalink / raw) To: linux-arm-kernel This patch add VM_BUG_ON_PAGE() for slab page, because _mapcount is an union with slab struct in struct page, avoid access _mapcount if this page is a slab page. Also remove the unneeded bracket. Signed-off-by: Yalin Wang <yalin.wang@sonymobile.com> --- include/linux/mm.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index b464611..a117527 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -449,7 +449,8 @@ static inline void page_mapcount_reset(struct page *page) static inline int page_mapcount(struct page *page) { - return atomic_read(&(page)->_mapcount) + 1; + VM_BUG_ON_PAGE(PageSlab(page), page); + return atomic_read(&page->_mapcount) + 1; } static inline int page_count(struct page *page) -- 2.1.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH V3] mm:add VM_BUG_ON_PAGE() for page_mapcount() 2014-12-08 9:59 ` [PATCH V3] mm:add VM_BUG_ON_PAGE() " Wang, Yalin @ 2014-12-08 11:54 ` Kirill A. Shutemov 2014-12-09 3:18 ` Hillf Danton 2015-06-09 16:14 ` Vlastimil Babka 2 siblings, 0 replies; 6+ messages in thread From: Kirill A. Shutemov @ 2014-12-08 11:54 UTC (permalink / raw) To: linux-arm-kernel On Mon, Dec 08, 2014 at 05:59:46PM +0800, Wang, Yalin wrote: > This patch add VM_BUG_ON_PAGE() for slab page, > because _mapcount is an union with slab struct in struct page, > avoid access _mapcount if this page is a slab page. > Also remove the unneeded bracket. > > Signed-off-by: Yalin Wang <yalin.wang@sonymobile.com> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> -- Kirill A. Shutemov ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH V3] mm:add VM_BUG_ON_PAGE() for page_mapcount() 2014-12-08 9:59 ` [PATCH V3] mm:add VM_BUG_ON_PAGE() " Wang, Yalin 2014-12-08 11:54 ` Kirill A. Shutemov @ 2014-12-09 3:18 ` Hillf Danton 2015-06-09 16:14 ` Vlastimil Babka 2 siblings, 0 replies; 6+ messages in thread From: Hillf Danton @ 2014-12-09 3:18 UTC (permalink / raw) To: linux-arm-kernel > > This patch add VM_BUG_ON_PAGE() for slab page, > because _mapcount is an union with slab struct in struct page, > avoid access _mapcount if this page is a slab page. > Also remove the unneeded bracket. > > Signed-off-by: Yalin Wang <yalin.wang@sonymobile.com> > --- Acked-by: Hillf Danton <hillf.zj@alibaba-inc.com> > include/linux/mm.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index b464611..a117527 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -449,7 +449,8 @@ static inline void page_mapcount_reset(struct page *page) > > static inline int page_mapcount(struct page *page) > { > - return atomic_read(&(page)->_mapcount) + 1; > + VM_BUG_ON_PAGE(PageSlab(page), page); > + return atomic_read(&page->_mapcount) + 1; > } > > static inline int page_count(struct page *page) > -- > 2.1.3 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH V3] mm:add VM_BUG_ON_PAGE() for page_mapcount() 2014-12-08 9:59 ` [PATCH V3] mm:add VM_BUG_ON_PAGE() " Wang, Yalin 2014-12-08 11:54 ` Kirill A. Shutemov 2014-12-09 3:18 ` Hillf Danton @ 2015-06-09 16:14 ` Vlastimil Babka 2 siblings, 0 replies; 6+ messages in thread From: Vlastimil Babka @ 2015-06-09 16:14 UTC (permalink / raw) To: linux-arm-kernel On 12/08/2014 10:59 AM, Wang, Yalin wrote: > This patch add VM_BUG_ON_PAGE() for slab page, > because _mapcount is an union with slab struct in struct page, > avoid access _mapcount if this page is a slab page. > Also remove the unneeded bracket. > > Signed-off-by: Yalin Wang <yalin.wang@sonymobile.com> > --- > include/linux/mm.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index b464611..a117527 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -449,7 +449,8 @@ static inline void page_mapcount_reset(struct page *page) > > static inline int page_mapcount(struct page *page) > { > - return atomic_read(&(page)->_mapcount) + 1; > + VM_BUG_ON_PAGE(PageSlab(page), page); > + return atomic_read(&page->_mapcount) + 1; > } > I think this might theoretically trigger on the following code in compaction's isolate_migratepages_block(): /* * Migration will fail if an anonymous page is pinned in memory, * so avoid taking lru_lock and isolating it unnecessarily in an * admittedly racy check. */ if (!page_mapping(page) && page_count(page) > page_mapcount(page)) continue; This is done after PageLRU() was positive, but the lru_lock might be not taken yet. So, there's some time window during which the page might have been reclaimed from LRU and become a PageSlab(page). !page_mapping(page) will be true in that case so it will proceed with page_mapcount(page) test and trigger the VM_BUG_ON. (That test was added by DavidR year ago in commit 119d6d59dcc0980dcd581fdadb6b2033b512a473) Vlastimil > static inline int page_count(struct page *page) > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-06-09 16:14 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <010b01d012ca$05244060$0f6cc120$@alibaba-inc.com>
2014-12-08 9:51 ` [PATCH] mm:add VM_BUG_ON() for page_mapcount() Wang, Yalin
2014-12-08 9:58 ` [PATCH V2] " Wang, Yalin
2014-12-08 9:59 ` [PATCH V3] mm:add VM_BUG_ON_PAGE() " Wang, Yalin
2014-12-08 11:54 ` Kirill A. Shutemov
2014-12-09 3:18 ` Hillf Danton
2015-06-09 16:14 ` Vlastimil Babka
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).