ovl: fix some xino configurations
Fix up two bugs in the coversion to xino_mode:
1. xino=off does not always end up in disabled mode
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: 0f831ec85e
("ovl: simplify ovl_same_sb() helper")
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
531d3040bc
commit
53afcd310e
@ -93,6 +93,7 @@ config OVERLAY_FS_XINO_AUTO
|
|||||||
bool "Overlayfs: auto enable inode number mapping"
|
bool "Overlayfs: auto enable inode number mapping"
|
||||||
default n
|
default n
|
||||||
depends on OVERLAY_FS
|
depends on OVERLAY_FS
|
||||||
|
depends on 64BIT
|
||||||
help
|
help
|
||||||
If this config option is enabled then overlay filesystems will use
|
If this config option is enabled then overlay filesystems will use
|
||||||
unused high bits in undelying filesystem inode numbers to map all
|
unused high bits in undelying filesystem inode numbers to map all
|
||||||
|
@ -1411,6 +1411,8 @@ static int ovl_get_layers(struct super_block *sb, struct ovl_fs *ofs,
|
|||||||
if (ofs->config.xino == OVL_XINO_ON)
|
if (ofs->config.xino == OVL_XINO_ON)
|
||||||
pr_info("\"xino=on\" is useless with all layers on same fs, ignore.\n");
|
pr_info("\"xino=on\" is useless with all layers on same fs, ignore.\n");
|
||||||
ofs->xino_mode = 0;
|
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) {
|
} else if (ofs->config.xino == OVL_XINO_ON && ofs->xino_mode < 0) {
|
||||||
/*
|
/*
|
||||||
* This is a roundup of number of bits needed for encoding
|
* This is a roundup of number of bits needed for encoding
|
||||||
@ -1623,8 +1625,13 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
|
|||||||
sb->s_stack_depth = 0;
|
sb->s_stack_depth = 0;
|
||||||
sb->s_maxbytes = MAX_LFS_FILESIZE;
|
sb->s_maxbytes = MAX_LFS_FILESIZE;
|
||||||
/* Assume underlaying fs uses 32bit inodes unless proven otherwise */
|
/* 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;
|
ofs->xino_mode = BITS_PER_LONG - 32;
|
||||||
|
if (!ofs->xino_mode) {
|
||||||
|
pr_warn("xino not supported on 32bit kernel, falling back to xino=off.\n");
|
||||||
|
ofs->config.xino = OVL_XINO_OFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* alloc/destroy_inode needed for setting up traps in inode cache */
|
/* alloc/destroy_inode needed for setting up traps in inode cache */
|
||||||
sb->s_op = &ovl_super_operations;
|
sb->s_op = &ovl_super_operations;
|
||||||
|
Loading…
Reference in New Issue
Block a user