mm: fix find_get_page() for shmem exceptional entries
Subsystems (2)
PATCH 1/1 mm: fix find_get_page() for shmem exceptional entries
It should return NULL, otherwise the caller will be very surprised.
--- mm/filemap.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
mm/filemap.c +1 -0
@@ -693,6 +693,7 @@ repeat:* here as an exceptional entry: so return it without * attempting to raise page count. */ + page =NULL ; goto out; }if (!page_cache_get_speculative (page))
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Bug was added in commit v3.0-7291-g8079b1c (mm: clarify the radix_tree exceptional cases) So, v3.1 and v3.2 affected.
Quoted 13 lines · Konstantin Khlebnikov
It should return NULL, otherwise the caller will be very surprised.
Signed-off-by Konstantin Khlebnikov<[email protected]>--- mm/filemap.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)mm/filemap.c +0
-0
mm/filemap.c repeat: · line 699
Quoted 7 lines
mm/filemap.c +1
-0@@ -693,6 +693,7 @@ repeat:* here as an exceptional entry: so return it without * attempting to raise page count. */ + page =NULL ; goto out; }if (!page_cache_get_speculative (page))
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Quoted 8 lines · Konstantin Khlebnikov
Bug was added in commit v3.0-7291-g8079b1c (mm: clarify the
radix_treeexceptional cases)
So, v3.1 and v3.2 affected.Quoted 3 lines · Konstantin Khlebnikov
It should return NULL, otherwise the caller will be very surprised.
Signed-off-by Konstantin Khlebnikov<[email protected]>
Thanks for worrying about it, but Nak to this patch.
If you have found somewhere that is surprised by an exceptional entry instead of a page, then indeed we shall need to fix that: I'm not aware of any.
There are several places that are prepared for the possibility:find_lock_page() (and your patch would be breaking shmem.c's use of find_lock_page()), mincore_page(), memcontrol.c's mc_handle_file_pte().
Of the remaining calls to find_get_page(), my understanding is that either they are filesystems operating upon their own pagecache, or they involve using ->readpage() - that's one of the two reasons why I gave shmem its own ->splice_read() and removed its ->readpage() before switching over to use the exceptional entries.
Hugh
Quoted 4 lines
Quoted 4 lines
--- mm/filemap.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
Quoted 12 lines
mm/filemap.c repeat: · line 699
Quoted 12 lines
mm/filemap.c +1
-0@@ -693,6 +693,7 @@ repeat:* here as an exceptional entry: so return it without * attempting to raise page count. */ + page =NULL ; goto out; }if (!page_cache_get_speculative (page))
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
Quoted 9 lines · Hugh Dickins
Quoted 7 lines · Konstantin Khlebnikov
Bug was added in commit v3.0-7291-g8079b1c (mm: clarify the
radix_treeexceptional cases)
So, v3.1 and v3.2 affected.Quoted 2 lines · Konstantin Khlebnikov
It should return NULL, otherwise the caller will be very surprised.
Quoted 7 lines
Quoted 1 line
Quoted 1 line
Signed-off-by Konstantin Khlebnikov<[email protected]>Thanks for worrying about it, but Nak to this patch.
If you have found somewhere that is surprised by an exceptional entry instead of a page, then indeed we shall need to fix that: I'm not aware of any.
Oh, this is very dangerous semantics, especially for function called "find-get-page" which sometimes returns not-getted not-a-page =)
Quoted 17 lines
There are several places that are prepared for the possibility:
find_lock_page()(and your patch would be breaking shmem.c's use offind_lock_page()),mincore_page(), memcontrol.c'smc_handle_file_pte().Of the remaining calls to
find_get_page(), my understanding is that either they are filesystems operating upon their own pagecache, or they involve using ->readpage() - that's one of the two reasons why I gave shmem its own ->splice_read() and removed its ->readpage() before switching over to use the exceptional entries.Hugh
Quoted 4 lines
Quoted 4 lines
--- mm/filemap.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
Quoted 12 lines
Quoted 4 lines
Quoted 4 lines
mm/filemap.c +0
-0Quoted 8 lines
mm/filemap.c repeat: · line 699
Quoted 8 lines
mm/filemap.c +1
-0@@ -693,6 +693,7 @@ repeat:* here as an exceptional entry: so return it without * attempting to raise page count. */ + page =NULL ; goto out; }if (!page_cache_get_speculative (page))
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>