Re: [f2fs-dev] [PATCH] f2fs: avoid inifinite loop to wait for flushing node pages at cp_error

2020-05-24 Thread Chao Yu
On 2020/5/22 22:47, Jaegeuk Kim wrote:
> Shutdown test is somtime hung, since dirty node pages weren't flushed out.
> Let's drop dirty pages at umount after shutdown.
> 
> Signed-off-by: Jaegeuk Kim 
> ---
>  fs/f2fs/node.c | 9 -
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
> index e632de10aedab..8c63964a82fd0 100644
> --- a/fs/f2fs/node.c
> +++ b/fs/f2fs/node.c
> @@ -1520,8 +1520,15 @@ static int __write_node_page(struct page *page, bool 
> atomic, bool *submitted,
>  
>   trace_f2fs_writepage(page, NODE);
>  
> - if (unlikely(f2fs_cp_error(sbi)))
> + if (unlikely(f2fs_cp_error(sbi))) {
> + if (is_sbi_flag_set(sbi, SBI_IS_CLOSE)) {
> + dec_page_count(sbi, F2FS_DIRTY_NODES);
> + up_read(>node_write);

We don't need to release node_write lock.

> + unlock_page(page);
> + return 0;
> + }
>   goto redirty_out;
> + }
>  
>   if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
>   goto redirty_out;
> 


Re: [PATCH] f2fs: avoid inifinite loop to wait for flushing node pages at cp_error

2020-05-22 Thread Jaegeuk Kim
Shutdown test is somtimes hung, since it keeps trying to flush dirty node pages
in an inifinite loop. Let's drop dirty pages at umount in that case.

Signed-off-by: Jaegeuk Kim 
---
v2:
 - fix typos

 fs/f2fs/node.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index e632de10aedab..8c63964a82fd0 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1520,8 +1520,15 @@ static int __write_node_page(struct page *page, bool 
atomic, bool *submitted,
 
trace_f2fs_writepage(page, NODE);
 
-   if (unlikely(f2fs_cp_error(sbi)))
+   if (unlikely(f2fs_cp_error(sbi))) {
+   if (is_sbi_flag_set(sbi, SBI_IS_CLOSE)) {
+   dec_page_count(sbi, F2FS_DIRTY_NODES);
+   up_read(>node_write);
+   unlock_page(page);
+   return 0;
+   }
goto redirty_out;
+   }
 
if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
goto redirty_out;
-- 
2.27.0.rc0.183.gde8f92d652-goog



[PATCH] f2fs: avoid inifinite loop to wait for flushing node pages at cp_error

2020-05-22 Thread Jaegeuk Kim
Shutdown test is somtime hung, since dirty node pages weren't flushed out.
Let's drop dirty pages at umount after shutdown.

Signed-off-by: Jaegeuk Kim 
---
 fs/f2fs/node.c | 9 -
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index e632de10aedab..8c63964a82fd0 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1520,8 +1520,15 @@ static int __write_node_page(struct page *page, bool 
atomic, bool *submitted,
 
trace_f2fs_writepage(page, NODE);
 
-   if (unlikely(f2fs_cp_error(sbi)))
+   if (unlikely(f2fs_cp_error(sbi))) {
+   if (is_sbi_flag_set(sbi, SBI_IS_CLOSE)) {
+   dec_page_count(sbi, F2FS_DIRTY_NODES);
+   up_read(>node_write);
+   unlock_page(page);
+   return 0;
+   }
goto redirty_out;
+   }
 
if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
goto redirty_out;
-- 
2.27.0.rc0.183.gde8f92d652-goog