This does seem to fix the problem I've been having.

I was encountering all I/Os to be blocked on my Android device
almost on a daily basis, but after this patch I'm rock solid for almost a week.

I'd appreciate it if you could add the following tags:
Reported-by: Park Ju Hyung <qkrwngud...@gmail.com>
Tested-by: Park Ju Hyung <qkrwngud...@gmail.com>

Also, a little additional note would be helpful
for those who are unfamiliar with f2fs:
This fixes a deadlock causing all I/Os to be blocked during heavy GC.

Thanks,
On Wed, Oct 17, 2018 at 11:34 AM Jaegeuk Kim <jaeg...@kernel.org> wrote:
>
> This reverts commit 66110abc4c931f879d70e83e1281f891699364bf.
>
> If we clear the cold data flag out of the writeback flow, we can miscount
> -1 by end_io.
>
> Balancing F2FS Async:
>  - IO (CP:    1, Data:   -1, Flush: (   0    0    1), Discard: (   ...
>
> GC thread:                              IRQ
> - move_data_page()
>  - set_page_dirty()
>   - clear_cold_data()
>                                         - f2fs_write_end_io()
>                                          - type = WB_DATA_TYPE(page);
>                                            here, we get wrong type
>                                          - dec_page_count(sbi, type);
>  - f2fs_wait_on_page_writeback()
>
> Cc: <sta...@vger.kernel.org>
> Signed-off-by: Jaegeuk Kim <jaeg...@kernel.org>
> ---
>  fs/f2fs/data.c | 4 ----
>  1 file changed, 4 deletions(-)
>
> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
> index 3f272c18fb61..0d0b4dd55b04 100644
> --- a/fs/f2fs/data.c
> +++ b/fs/f2fs/data.c
> @@ -2650,10 +2650,6 @@ static int f2fs_set_data_page_dirty(struct page *page)
>         if (!PageUptodate(page))
>                 SetPageUptodate(page);
>
> -       /* don't remain PG_checked flag which was set during GC */
> -       if (is_cold_data(page))
> -               clear_cold_data(page);
> -
>         if (f2fs_is_atomic_file(inode) && 
> !f2fs_is_commit_atomic_write(inode)) {
>                 if (!IS_ATOMIC_WRITTEN_PAGE(page)) {
>                         f2fs_register_inmem_page(inode, page);
> --
> 2.19.0.605.g01d371f741-goog
>
>
>
> _______________________________________________
> Linux-f2fs-devel mailing list
> Linux-f2fs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to