friendly ping...

fengnan chang <fengnanch...@gmail.com> 于2022年10月14日周五 16:46写道:
>
> ping,  it seems this had been forgotten.
>
> > 2022年6月8日 21:48,Fengnan Chang <fengnanch...@gmail.com> 写道:
> >
> > When decompressed failed, f2fs_prepare_compress_overwrite will enter
> > endless loop, may casue hungtask.
> >
> > [   14.088665] F2FS-fs (nvme0n1): lz4 decompress failed, ret:-4155
> > [   14.089851] F2FS-fs (nvme0n1): lz4 decompress failed, ret:-4155
> >
> > Signed-off-by: Fengnan Chang <fengnanch...@gmail.com>
> > ---
> > fs/f2fs/compress.c | 21 ++++++++++++++++-----
> > 1 file changed, 16 insertions(+), 5 deletions(-)
> >
> > diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
> > index 24824cd96f36..1764e3859262 100644
> > --- a/fs/f2fs/compress.c
> > +++ b/fs/f2fs/compress.c
> > @@ -1060,7 +1060,7 @@ static int prepare_compress_overwrite(struct 
> > compress_ctx *cc,
> >       sector_t last_block_in_bio;
> >       unsigned fgp_flag = FGP_LOCK | FGP_WRITE | FGP_CREAT;
> >       pgoff_t start_idx = start_idx_of_cluster(cc);
> > -     int i, ret;
> > +     int i, ret, retry_count = 3;
> >
> > retry:
> >       ret = f2fs_is_compressed_cluster(cc->inode, start_idx);
> > @@ -1120,7 +1120,12 @@ static int prepare_compress_overwrite(struct 
> > compress_ctx *cc,
> >                       f2fs_put_rpages(cc);
> >                       f2fs_unlock_rpages(cc, i + 1);
> >                       f2fs_destroy_compress_ctx(cc, true);
> > -                     goto retry;
> > +                     retry_count--;
> > +                     if (PageError(page) && !retry_count) {
> > +                             ret = -EIO;
> > +                             goto out;
> > +                     } else
> > +                             goto retry;
> >               }
> >       }
> >
> > @@ -1657,10 +1662,16 @@ static void __f2fs_decompress_end_io(struct 
> > decompress_io_ctx *dic, bool failed)
> >               if (!rpage)
> >                       continue;
> >
> > -             /* PG_error was set if verity failed. */
> > -             if (failed || PageError(rpage)) {
> > +             if (failed) {
> > +                     /* decompress page failed */
> > +                     ClearPageUptodate(rpage);
> > +                     SetPageError(rpage);
> > +             } else if (PageError(rpage)) {
> > +                     /*
> > +                      * PG_error was set if verity failed.
> > +                      * will re-read again later.
> > +                      */
> >                       ClearPageUptodate(rpage);
> > -                     /* will re-read again later */
> >                       ClearPageError(rpage);
> >               } else {
> >                       SetPageUptodate(rpage);
> > --
> > 2.25.1
> >
>


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

Reply via email to