Message ID | 20220202143307.96282-3-songmuchun@bytedance.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix some bugs related to ramp and dax | expand |
On Wed 02-02-22 22:33:03, Muchun Song wrote: > The flush_cache_page() only remove a PAGE_SIZE sized range from the cache. > However, it does not cover the full pages in a THP except a head page. > Replace it with flush_cache_range() to fix this issue. > > Fixes: f729c8c9b24f ("dax: wrprotect pmd_t in dax_mapping_entry_mkclean") > Signed-off-by: Muchun Song <songmuchun@bytedance.com> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/dax.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/fs/dax.c b/fs/dax.c > index 88be1c02a151..e031e4b6c13c 100644 > --- a/fs/dax.c > +++ b/fs/dax.c > @@ -857,7 +857,8 @@ static void dax_entry_mkclean(struct address_space *mapping, pgoff_t index, > if (!pmd_dirty(*pmdp) && !pmd_write(*pmdp)) > goto unlock_pmd; > > - flush_cache_page(vma, address, pfn); > + flush_cache_range(vma, address, > + address + HPAGE_PMD_SIZE); > pmd = pmdp_invalidate(vma, address, pmdp); > pmd = pmd_wrprotect(pmd); > pmd = pmd_mkclean(pmd); > -- > 2.11.0 >
diff --git a/fs/dax.c b/fs/dax.c index 88be1c02a151..e031e4b6c13c 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -857,7 +857,8 @@ static void dax_entry_mkclean(struct address_space *mapping, pgoff_t index, if (!pmd_dirty(*pmdp) && !pmd_write(*pmdp)) goto unlock_pmd; - flush_cache_page(vma, address, pfn); + flush_cache_range(vma, address, + address + HPAGE_PMD_SIZE); pmd = pmdp_invalidate(vma, address, pmdp); pmd = pmd_wrprotect(pmd); pmd = pmd_mkclean(pmd);
The flush_cache_page() only remove a PAGE_SIZE sized range from the cache. However, it does not cover the full pages in a THP except a head page. Replace it with flush_cache_range() to fix this issue. Fixes: f729c8c9b24f ("dax: wrprotect pmd_t in dax_mapping_entry_mkclean") Signed-off-by: Muchun Song <songmuchun@bytedance.com> --- fs/dax.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)