On Mon, Feb 24, 2020 at 1:41 PM Miklos Szeredi <miklos@xxxxxxxxxx> wrote: > > 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)? Yes, I certainly did :) And no, I did not test on a 32bit kernel... Thanks, Amir.