LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* Re: [PATCH] mm:add VM_BUG_ON() for page_mapcount()
@ 2014-12-08 9:33 Hillf Danton
2014-12-08 9:51 ` Wang, Yalin
2014-12-08 9:58 ` [PATCH V2] " Wang, Yalin
0 siblings, 2 replies; 9+ messages in thread
From: Hillf Danton @ 2014-12-08 9:33 UTC (permalink / raw)
To: Yalin.Wang
Cc: linux-kernel, linux-mm, linux-arm-kernel, Andrew Morton, Hillf Danton
>
> 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/ ?
> + return atomic_read(&page->_mapcount) + 1;
> }
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* RE: [PATCH] mm:add VM_BUG_ON() for page_mapcount()
2014-12-08 9:33 [PATCH] mm:add VM_BUG_ON() for page_mapcount() Hillf Danton
@ 2014-12-08 9:51 ` Wang, Yalin
2014-12-08 9:58 ` [PATCH V2] " Wang, Yalin
1 sibling, 0 replies; 9+ messages in thread
From: Wang, Yalin @ 2014-12-08 9:51 UTC (permalink / raw)
To: 'Hillf Danton'
Cc: linux-kernel, linux-mm, linux-arm-kernel, Andrew Morton
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 1289 bytes --]
> -----Original Message-----
> From: Hillf Danton [mailto:hillf.zj@alibaba-inc.com]
> Sent: Monday, December 08, 2014 5:33 PM
> To: Wang, Yalin
> Cc: linux-kernel; linux-mm@kvack.org; linux-arm-kernel@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 .
ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH V2] mm:add VM_BUG_ON() for page_mapcount()
2014-12-08 9:33 [PATCH] mm:add VM_BUG_ON() for page_mapcount() Hillf Danton
2014-12-08 9:51 ` 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; 9+ messages in thread
From: Wang, Yalin @ 2014-12-08 9:58 UTC (permalink / raw)
To: 'Hillf Danton',
linux-kernel, linux-mm, linux-arm-kernel, Andrew Morton
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 954 bytes --]
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
ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥
^ permalink raw reply [flat|nested] 9+ 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; 9+ messages in thread
From: Wang, Yalin @ 2014-12-08 9:59 UTC (permalink / raw)
To: 'Hillf Danton', 'linux-kernel',
'linux-mm@kvack.org',
'linux-arm-kernel@lists.infradead.org',
'Andrew Morton'
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 954 bytes --]
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
ÿôèº{.nÇ+·®+%Ëÿ±éݶ\x17¥wÿº{.nÇ+·¥{±þG«éÿ{ayº\x1dÊÚë,j\a¢f£¢·hïêÿêçz_è®\x03(éÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?¨èÚ&£ø§~á¶iOæ¬z·vØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?I¥
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [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; 9+ messages in thread
From: Kirill A. Shutemov @ 2014-12-08 11:54 UTC (permalink / raw)
To: Wang, Yalin
Cc: 'Hillf Danton', 'linux-kernel',
'linux-mm@kvack.org',
'linux-arm-kernel@lists.infradead.org',
'Andrew Morton'
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] 9+ messages in thread
* Re: [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; 9+ messages in thread
From: Hillf Danton @ 2014-12-09 3:18 UTC (permalink / raw)
To: 'Wang, Yalin', 'linux-kernel',
linux-mm, linux-arm-kernel, 'Andrew Morton'
>
> 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] 9+ messages in thread
* Re: [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; 9+ messages in thread
From: Vlastimil Babka @ 2015-06-09 16:14 UTC (permalink / raw)
To: Wang, Yalin, 'Hillf Danton', 'linux-kernel',
'linux-mm@kvack.org',
'linux-arm-kernel@lists.infradead.org',
'Andrew Morton'
Cc: Kirill A. Shutemov, David Rientjes
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] 9+ messages in thread
* Re: [PATCH] mm:add VM_BUG_ON() for page_mapcount()
2014-12-08 7:47 ` [PATCH] mm:add VM_BUG_ON() for page_mapcount() Wang, Yalin
@ 2014-12-08 11:50 ` Kirill A. Shutemov
0 siblings, 0 replies; 9+ messages in thread
From: Kirill A. Shutemov @ 2014-12-08 11:50 UTC (permalink / raw)
To: Wang, Yalin
Cc: 'linux-kernel@vger.kernel.org',
'linux-mm@kvack.org',
'linux-arm-kernel@lists.infradead.org',
'akpm@linux-foundation.org', 'riel@redhat.com',
'nasa4836@gmail.com', 'sasha.levin@oracle.com'
On Mon, Dec 08, 2014 at 03:47:47PM +0800, Wang, Yalin wrote:
> 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));
VM_BUG_ON_PAGE(), please.
--
Kirill A. Shutemov
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH] mm:add VM_BUG_ON() for page_mapcount()
2014-12-05 10:21 ` [RFC V2] " Wang, Yalin
@ 2014-12-08 7:47 ` Wang, Yalin
2014-12-08 11:50 ` Kirill A. Shutemov
0 siblings, 1 reply; 9+ messages in thread
From: Wang, Yalin @ 2014-12-08 7:47 UTC (permalink / raw)
To: 'linux-kernel@vger.kernel.org',
'linux-mm@kvack.org',
'linux-arm-kernel@lists.infradead.org',
'akpm@linux-foundation.org', 'riel@redhat.com',
'nasa4836@gmail.com', 'sasha.levin@oracle.com'
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));
+ return atomic_read(&page->_mapcount) + 1;
}
static inline int page_count(struct page *page)
--
2.1.3
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2015-06-09 16:14 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-08 9:33 [PATCH] mm:add VM_BUG_ON() for page_mapcount() Hillf Danton
2014-12-08 9:51 ` 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
-- strict thread matches above, loose matches on Subject: below --
2014-12-05 8:57 [RFC] mm:add KPF_ZERO_PAGE flag for /proc/kpageflags Wang, Yalin
2014-12-05 10:21 ` [RFC V2] " Wang, Yalin
2014-12-08 7:47 ` [PATCH] mm:add VM_BUG_ON() for page_mapcount() Wang, Yalin
2014-12-08 11:50 ` Kirill A. Shutemov
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).