On Fri, Feb 21, 2020 at 3:34 PM Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > Fix up two bugs in the coversion to xino_mode: > 1. xino=off does not alway end up in disabled mode s/alway/always/ > 2. xino=auto on 32bit arch should end up in disabled mode > > Take a proactive approach to disabling xino on 32bit kernel: > 1. Disable XINO_AUTO config during build time > 2. Disable xino with a warning on mount time > > As a by product, xino=on on 32bit arch also ends up in disabled mode. > We never intended to enable xino on 32bit arch and this will make the > rest of the logic simpler. > > Fixes: 0f831ec85eda ("ovl: simplify ovl_same_sb() helper") > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> > --- > fs/overlayfs/Kconfig | 1 + > fs/overlayfs/super.c | 9 ++++++++- > 2 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/fs/overlayfs/Kconfig b/fs/overlayfs/Kconfig > index 444e2da4f60e..714c14c47ca5 100644 > --- a/fs/overlayfs/Kconfig > +++ b/fs/overlayfs/Kconfig > @@ -93,6 +93,7 @@ config OVERLAY_FS_XINO_AUTO > bool "Overlayfs: auto enable inode number mapping" > default n > depends on OVERLAY_FS > + depends on 64BIT > help > If this config option is enabled then overlay filesystems will use > unused high bits in undelying filesystem inode numbers to map all > diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c > index 6dc45bc7d664..f4c0ad69f9a6 100644 > --- a/fs/overlayfs/super.c > +++ b/fs/overlayfs/super.c > @@ -1489,6 +1489,8 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs, > if (ofs->config.xino == OVL_XINO_ON) > pr_info("\"xino=on\" is useless with all layers on same fs, ignore.\n"); > ofs->xino_mode = 0; > + } else if (ofs->config.xino == OVL_XINO_OFF) { > + ofs->xino_mode = -1; > } else if (ofs->config.xino == OVL_XINO_ON && ofs->xino_mode < 0) { > /* > * This is a roundup of number of bits needed for encoding > @@ -1735,8 +1737,13 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent) > sb->s_stack_depth = 0; > sb->s_maxbytes = MAX_LFS_FILESIZE; > /* Assume underlaying fs uses 32bit inodes unless proven otherwise */ > - if (ofs->config.xino != OVL_XINO_OFF) > + if (ofs->config.xino != OVL_XINO_OFF) { > ofs->xino_mode = BITS_PER_LONG - 32; > + if (!ofs->config.xino) { Did you mean (!ofs->xino_mode)? Thanks, Miklos