On 04/11, Chao Yu wrote: > On 2024/4/10 4:34, Jaegeuk Kim wrote: > > Let's stop issuing compressed writes and clear their writeback flags. > > > > Signed-off-by: Jaegeuk Kim <jaeg...@kernel.org> > > --- > > fs/f2fs/compress.c | 33 +++++++++++++++++++++++++++++++-- > > 1 file changed, 31 insertions(+), 2 deletions(-) > > > > diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c > > index d67c471ab5df..3a8ecc6aee84 100644 > > --- a/fs/f2fs/compress.c > > +++ b/fs/f2fs/compress.c > > @@ -1031,6 +1031,25 @@ static void set_cluster_writeback(struct > > compress_ctx *cc) > > } > > } > > +static void cancel_cluster_writeback(struct compress_ctx *cc, int > > submitted) > > +{ > > + int i; > > + > > + for (i = 0; i < cc->cluster_size; i++) { > > + if (!cc->rpages[i]) > > + continue; > > + if (i < submitted) { > > + if (i) > > + f2fs_wait_on_page_writeback(cc->rpages[i], > > + DATA, true, true); > > + inode_inc_dirty_pages(cc->inode); > > + lock_page(cc->rpages[i]); > > + } > > + clear_page_private_gcing(cc->rpages[i]); > > + end_page_writeback(cc->rpages[i]); > > + } > > +} > > + > > static void set_cluster_dirty(struct compress_ctx *cc) > > { > > int i; > > @@ -1232,7 +1251,6 @@ static int f2fs_write_compressed_pages(struct > > compress_ctx *cc, > > .page = NULL, > > .encrypted_page = NULL, > > .compressed_page = NULL, > > - .submitted = 0, > > .io_type = io_type, > > .io_wbc = wbc, > > .encrypted = fscrypt_inode_uses_fs_layer_crypto(cc->inode) ? > > @@ -1358,7 +1376,15 @@ static int f2fs_write_compressed_pages(struct > > compress_ctx *cc, > > fio.compressed_page = cc->cpages[i - 1]; > > cc->cpages[i - 1] = NULL; > > + fio.submitted = 0; > > f2fs_outplace_write_data(&dn, &fio); > > + if (unlikely(!fio.submitted)) { > > + cancel_cluster_writeback(cc, i); > > + > > + /* To call fscrypt_finalize_bounce_page */ > > + i = cc->valid_nr_cpages; > > *submitted = 0; ?
And, it seems this is not enough to address kernel hang on wait_on_writeback while running fsstress + shutdown test. Stay tuned. > > Thanks, > > > + goto out_destroy_crypt; > > + } > > (*submitted)++; > > unlock_continue: > > inode_dec_dirty_pages(cc->inode); > > @@ -1392,8 +1418,11 @@ static int f2fs_write_compressed_pages(struct > > compress_ctx *cc, > > out_destroy_crypt: > > page_array_free(cc->inode, cic->rpages, cc->cluster_size); > > - for (--i; i >= 0; i--) > > + for (--i; i >= 0; i--) { > > + if (!cc->cpages[i]) > > + continue; > > fscrypt_finalize_bounce_page(&cc->cpages[i]); > > + } > > out_put_cic: > > kmem_cache_free(cic_entry_slab, cic); > > out_put_dnode: _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel