2019-03-31 11:35:23

by Liu Xiang

[permalink] [raw]
Subject: [PATCH v2] ext4: fix prefetchw of NULL page

In ext4_mpage_readpages(), if the parameter pages is not NULL, another
parameter page is NULL. At the first time prefetchw(&page->flags)
works on NULL. From second time, prefetchw(&page->flags) always works on
the last consumed page. This might do little improvment for handling
current page. So prefetchw() should be called while the page pointer
has just been updated.

Signed-off-by: Liu Xiang <[email protected]>
---

Changes in v2:
remove prefetchw() when pages is NULL and change comment

fs/ext4/readpage.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c
index 6aa282e..f138c47 100644
--- a/fs/ext4/readpage.c
+++ b/fs/ext4/readpage.c
@@ -126,9 +126,10 @@ int ext4_mpage_readpages(struct address_space *mapping,
int fully_mapped = 1;
unsigned first_hole = blocks_per_page;

- prefetchw(&page->flags);
if (pages) {
page = lru_to_page(pages);
+
+ prefetchw(&page->flags);
list_del(&page->lru);
if (add_to_page_cache_lru(page, mapping, page->index,
readahead_gfp_mask(mapping)))
--
1.9.1



2019-04-07 16:08:39

by Theodore Ts'o

[permalink] [raw]
Subject: Re: [PATCH v2] ext4: fix prefetchw of NULL page

On Sun, Mar 31, 2019 at 04:11:34PM +0800, Liu Xiang wrote:
> In ext4_mpage_readpages(), if the parameter pages is not NULL, another
> parameter page is NULL. At the first time prefetchw(&page->flags)
> works on NULL. From second time, prefetchw(&page->flags) always works on
> the last consumed page. This might do little improvment for handling
> current page. So prefetchw() should be called while the page pointer
> has just been updated.

Thanks, applied.

- Ted