Messages in this thread | | | Date | Sat, 28 Jul 2018 19:00:13 -0700 | From | Jaegeuk Kim <> | Subject | Re: [PATCH 4/4] f2fs: fix to spread clear_cold_data() |
| |
On 07/27, Chao Yu wrote: > We need to drop PG_checked flag on page as well when we clear PG_uptodate > flag, in order to avoid treating the page as GCing one later.
What do you mean "treating the page as GCing one"?
> > Signed-off-by: Weichao Guo <guoweichao@huawei.com> > Signed-off-by: Chao Yu <yuchao0@huawei.com> > --- > fs/f2fs/data.c | 8 +++++++- > fs/f2fs/dir.c | 1 + > fs/f2fs/segment.c | 4 +++- > 3 files changed, 11 insertions(+), 2 deletions(-) > > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c > index a29f3162b887..2817e2f4eb17 100644 > --- a/fs/f2fs/data.c > +++ b/fs/f2fs/data.c > @@ -1768,6 +1768,7 @@ int f2fs_do_write_data_page(struct f2fs_io_info *fio) > /* This page is already truncated */ > if (fio->old_blkaddr == NULL_ADDR) { > ClearPageUptodate(page); > + clear_cold_data(page); > goto out_writepage; > } > got_it: > @@ -1943,8 +1944,10 @@ static int __write_data_page(struct page *page, bool *submitted, > > out: > inode_dec_dirty_pages(inode); > - if (err) > + if (err) { > ClearPageUptodate(page); > + clear_cold_data(page); > + } > > if (wbc->for_reclaim) { > f2fs_submit_merged_write_cond(sbi, inode, 0, page->index, DATA); > @@ -2534,6 +2537,8 @@ void f2fs_invalidate_page(struct page *page, unsigned int offset, > } > } > > + clear_cold_data(page); > + > /* This is atomic written page, keep Private */ > if (IS_ATOMIC_WRITTEN_PAGE(page)) > return f2fs_drop_inmem_page(inode, page); > @@ -2552,6 +2557,7 @@ int f2fs_release_page(struct page *page, gfp_t wait) > if (IS_ATOMIC_WRITTEN_PAGE(page)) > return 0; > > + clear_cold_data(page); > set_page_private(page, 0); > ClearPagePrivate(page); > return 1; > diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c > index 7f955c4e86a4..1e4a4122eb0c 100644 > --- a/fs/f2fs/dir.c > +++ b/fs/f2fs/dir.c > @@ -734,6 +734,7 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page, > clear_page_dirty_for_io(page); > ClearPagePrivate(page); > ClearPageUptodate(page); > + clear_cold_data(page); > inode_dec_dirty_pages(dir); > f2fs_remove_dirty_inode(dir); > } > diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c > index 58abbdc53561..4d83961745e6 100644 > --- a/fs/f2fs/segment.c > +++ b/fs/f2fs/segment.c > @@ -267,8 +267,10 @@ static int __revoke_inmem_pages(struct inode *inode, > } > next: > /* we don't need to invalidate this in the sccessful status */ > - if (drop || recover) > + if (drop || recover) { > ClearPageUptodate(page); > + clear_cold_data(page); > + } > set_page_private(page, 0); > ClearPagePrivate(page); > f2fs_put_page(page, 1); > -- > 2.18.0.rc1
| |