Looks good to me, please merge this patch On Thu, Jun 1, 2023 at 10:54 AM Gao Xiang <hsiang...@linux.alibaba.com> wrote:
> Previously PAGE_SIZE was actually unset for most cases so that it was > always hard-coded 4096. > > In order to set EROFS_MAX_BLOCK_SIZE correctly, let's detect the real > page size when configuring and get rid of PAGE_SIZE. > > Cc: Kelvin Zhang <zhangkel...@google.com> > Signed-off-by: Gao Xiang <hsiang...@linux.alibaba.com> > --- > change since v1: > - get rid of PAGE_SIZE (Kelvin); > > configure.ac | 38 ++++++++++++++++++++++++++++++++++++++ > include/erofs/internal.h | 10 ++-------- > lib/namei.c | 2 +- > mkfs/main.c | 4 ++-- > 4 files changed, 43 insertions(+), 11 deletions(-) > > diff --git a/configure.ac b/configure.ac > index 4dbe86f..2ade490 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -59,6 +59,8 @@ AC_DEFUN([EROFS_UTILS_PARSE_DIRECTORY], > fi > ]) > > +AC_ARG_VAR([MAX_BLOCK_SIZE], [The maximum block size which erofs-utils > supports]) > + > AC_ARG_ENABLE([debug], > [AS_HELP_STRING([--enable-debug], > [enable debugging mode @<:@default=no@:>@])], > @@ -202,6 +204,35 @@ AC_CHECK_FUNCS(m4_flatten([ > tmpfile64 > utimensat])) > > +# Detect maximum block size if necessary > +AS_IF([test "x$MAX_BLOCK_SIZE" = "x"], [ > + AC_CACHE_CHECK([sysconf (_SC_PAGESIZE)], [erofs_cv_max_block_size], > + AC_RUN_IFELSE([AC_LANG_PROGRAM( > +[[ > +#include <unistd.h> > +#include <stdio.h> > +]], > +[[ > + int result; > + FILE *f; > + > + result = sysconf(_SC_PAGESIZE); > + if (result < 0) > + return 1; > + > + f = fopen("conftest.out", "w"); > + if (!f) > + return 1; > + > + fprintf(f, "%d", result); > + fclose(f); > + return 0; > +]])], > + [erofs_cv_max_block_size=`cat conftest.out`], > + [], > + [])) > +], [erofs_cv_max_block_size=$MAX_BLOCK_SIZE]) > + > # Configure debug mode > AS_IF([test "x$enable_debug" != "xno"], [], [ > dnl Turn off all assert checking. > @@ -367,6 +398,13 @@ if test "x${have_liblzma}" = "xyes"; then > AC_SUBST([liblzma_CFLAGS]) > fi > > +# Dump maximum block size > +AS_IF([test "x$erofs_cv_max_block_size" = "x"], > + [$erofs_cv_max_block_size = 4096], []) > + > +AC_DEFINE_UNQUOTED([EROFS_MAX_BLOCK_SIZE], [$erofs_cv_max_block_size], > + [The maximum block size which erofs-utils supports]) > + > AC_CONFIG_FILES([Makefile > man/Makefile > lib/Makefile > diff --git a/include/erofs/internal.h b/include/erofs/internal.h > index b3d04be..370cfac 100644 > --- a/include/erofs/internal.h > +++ b/include/erofs/internal.h > @@ -27,16 +27,10 @@ typedef unsigned short umode_t; > #define PATH_MAX 4096 /* # chars in a path name including nul */ > #endif > > -#ifndef PAGE_SHIFT > -#define PAGE_SHIFT (12) > +#ifndef EROFS_MAX_BLOCK_SIZE > +#define EROFS_MAX_BLOCK_SIZE 4096 > #endif > > -#ifndef PAGE_SIZE > -#define PAGE_SIZE (1U << PAGE_SHIFT) > -#endif > - > -#define EROFS_MAX_BLOCK_SIZE PAGE_SIZE > - > #define EROFS_ISLOTBITS 5 > #define EROFS_SLOTSIZE (1U << EROFS_ISLOTBITS) > > diff --git a/lib/namei.c b/lib/namei.c > index 3d0cf93..3751741 100644 > --- a/lib/namei.c > +++ b/lib/namei.c > @@ -137,7 +137,7 @@ int erofs_read_inode_from_disk(struct erofs_inode *vi) > vi->u.chunkbits = sbi.blkszbits + > (vi->u.chunkformat & > EROFS_CHUNK_FORMAT_BLKBITS_MASK); > } else if (erofs_inode_is_data_compressed(vi->datalayout)) { > - if (erofs_blksiz() != PAGE_SIZE) > + if (erofs_blksiz() != EROFS_MAX_BLOCK_SIZE) > return -EOPNOTSUPP; > return z_erofs_fill_inode(vi); > } > diff --git a/mkfs/main.c b/mkfs/main.c > index 3ec4903..a6a2d0e 100644 > --- a/mkfs/main.c > +++ b/mkfs/main.c > @@ -532,7 +532,7 @@ static int mkfs_parse_options_cfg(int argc, char > *argv[]) > cfg.c_dbg_lvl = EROFS_ERR; > cfg.c_showprogress = false; > } > - if (cfg.c_compr_alg[0] && erofs_blksiz() != PAGE_SIZE) { > + if (cfg.c_compr_alg[0] && erofs_blksiz() != EROFS_MAX_BLOCK_SIZE) { > erofs_err("compression is unsupported for now with block > size %u", > erofs_blksiz()); > return -EINVAL; > @@ -670,7 +670,7 @@ static void erofs_mkfs_default_options(void) > { > cfg.c_showprogress = true; > cfg.c_legacy_compress = false; > - sbi.blkszbits = ilog2(PAGE_SIZE); > + sbi.blkszbits = ilog2(EROFS_MAX_BLOCK_SIZE); > sbi.feature_incompat = EROFS_FEATURE_INCOMPAT_LZ4_0PADDING; > sbi.feature_compat = EROFS_FEATURE_COMPAT_SB_CHKSUM | > EROFS_FEATURE_COMPAT_MTIME; > -- > 2.24.4 > > -- Sincerely, Kelvin Zhang