Hi Yue,

On Sat, Oct 09, 2021 at 11:50:32AM +0800, Yue Hu wrote:
> On Sat,  9 Oct 2021 04:08:38 +0800
> Gao Xiang <[email protected]> wrote:
> 
> > From: Gao Xiang <[email protected]>
> > 
> > Previously, for each HEAD lcluster, it can be either HEAD or PLAIN
> > lcluster to indicate whether the whole pcluster is compressed or not.
> > 
> > In this patch, a new HEAD2 head type is introduced to specify another
> > compression algorithm other than the primary algorithm for each
> > compressed file, which can be used for upcoming LZMA compression and
> > LZ4 range dictionary compression for various data patterns.
> > 
> > It has been stayed in the EROFS roadmap for years. Complete it now!
> > 
> > Signed-off-by: Gao Xiang <[email protected]>
> > ---
> >  fs/erofs/erofs_fs.h |  8 +++++---
> >  fs/erofs/zmap.c     | 36 +++++++++++++++++++++++++++---------
> >  2 files changed, 32 insertions(+), 12 deletions(-)
> > 
> > diff --git a/fs/erofs/erofs_fs.h b/fs/erofs/erofs_fs.h
> > index b0b23f41abc3..f579c8c78fff 100644
> > --- a/fs/erofs/erofs_fs.h
> > +++ b/fs/erofs/erofs_fs.h
> > @@ -21,11 +21,13 @@
> >  #define EROFS_FEATURE_INCOMPAT_COMPR_CFGS  0x00000002
> >  #define EROFS_FEATURE_INCOMPAT_BIG_PCLUSTER        0x00000002
> >  #define EROFS_FEATURE_INCOMPAT_CHUNKED_FILE        0x00000004
> > +#define EROFS_FEATURE_INCOMPAT_COMPR_HEAD2 0x00000008
> >  #define EROFS_ALL_FEATURE_INCOMPAT         \
> >     (EROFS_FEATURE_INCOMPAT_LZ4_0PADDING | \
> >      EROFS_FEATURE_INCOMPAT_COMPR_CFGS | \
> >      EROFS_FEATURE_INCOMPAT_BIG_PCLUSTER | \
> > -    EROFS_FEATURE_INCOMPAT_CHUNKED_FILE)
> > +    EROFS_FEATURE_INCOMPAT_CHUNKED_FILE | \
> > +    EROFS_FEATURE_INCOMPAT_COMPR_HEAD2)
> >  
> >  #define EROFS_SB_EXTSLOT_SIZE      16
> >  
> > @@ -314,9 +316,9 @@ struct z_erofs_map_header {
> >   */
> >  enum {
> >     Z_EROFS_VLE_CLUSTER_TYPE_PLAIN          = 0,
> > -   Z_EROFS_VLE_CLUSTER_TYPE_HEAD           = 1,
> > +   Z_EROFS_VLE_CLUSTER_TYPE_HEAD1          = 1,
> >     Z_EROFS_VLE_CLUSTER_TYPE_NONHEAD        = 2,
> > -   Z_EROFS_VLE_CLUSTER_TYPE_RESERVED       = 3,
> > +   Z_EROFS_VLE_CLUSTER_TYPE_HEAD2          = 3,
> >     Z_EROFS_VLE_CLUSTER_TYPE_MAX
> >  };
> >  
> > diff --git a/fs/erofs/zmap.c b/fs/erofs/zmap.c
> > index 9d9c26343dab..03945f15ceae 100644
> > --- a/fs/erofs/zmap.c
> > +++ b/fs/erofs/zmap.c
> > @@ -69,11 +69,17 @@ static int z_erofs_fill_inode_lazy(struct inode *inode)
> >     vi->z_algorithmtype[1] = h->h_algorithmtype >> 4;
> >  
> >     if (vi->z_algorithmtype[0] >= Z_EROFS_COMPRESSION_MAX) {
> > -           erofs_err(sb, "unknown compression format %u for nid %llu, 
> > please upgrade kernel",
> > +           erofs_err(sb, "unknown HEAD1 format %u for nid %llu, please 
> > upgrade kernel",
> >                       vi->z_algorithmtype[0], vi->nid);
> >             err = -EOPNOTSUPP;
> >             goto unmap_done;
> >     }
> > +   if (vi->z_algorithmtype[1] >= Z_EROFS_COMPRESSION_MAX) {
> > +           erofs_err(sb, "unknown HEAD2 format %u for nid %llu, please 
> > upgrade kernel",
> > +                     vi->z_algorithmtype[1], vi->nid);
> > +           err = -EOPNOTSUPP;
> > +           goto unmap_done;
> > +   }
> 
> Seems duplicated a little, how about below code?
> 
>       if (vi->z_algorithmtype[i] >= Z_EROFS_COMPRESSION_MAX ||
>           vi->z_algorithmtype[++i] >= Z_EROFS_COMPRESSION_MAX) {
>                 erofs_err(sb, "unknown HEAD%u format %u for nid %llu, please 
> upgrade kernel",
>                         i, vi->z_algorithmtype[i], vi->nid);
>               err = -EOPNOTSUPP;
>               goto unmap_done;
>       }

Yeah, good simplification. I will update it and rename `i' to `headnr'
here.

Thanks,
Gao Xiang

Reply via email to