mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
ovl: Support mounting case-insensitive enabled layers
Drop the restriction for casefold dentries lookup to enable support for case-insensitive layers in overlayfs. Support case-insensitive layers with the condition that they should be uniformly enabled across the stack and (i.e. if the root mount dir has casefold enabled, so should all the dirs bellow for every layer). Reviewed-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: André Almeida <andrealmeid@igalia.com> Signed-off-by: Amir Goldstein <amir73il@gmail.com>
This commit is contained in:
parent
dfc7da402c
commit
16754d61dc
|
|
@ -239,13 +239,14 @@ static int ovl_lookup_single(struct dentry *base, struct ovl_lookup_data *d,
|
||||||
char val;
|
char val;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We allow filesystems that are case-folding capable but deny composing
|
* We allow filesystems that are case-folding capable as long as the
|
||||||
* ovl stack from case-folded directories. If someone has enabled case
|
* layers are consistently enabled in the stack, enabled for every dir
|
||||||
* folding on a directory on underlying layer, the warranty of the ovl
|
* or disabled in all dirs. If someone has modified case folding on a
|
||||||
* stack is voided.
|
* directory on underlying layer, the warranty of the ovl stack is
|
||||||
|
* voided.
|
||||||
*/
|
*/
|
||||||
if (ovl_dentry_casefolded(base)) {
|
if (ofs->casefold != ovl_dentry_casefolded(base)) {
|
||||||
warn = "case folded parent";
|
warn = "parent wrong casefold";
|
||||||
err = -ESTALE;
|
err = -ESTALE;
|
||||||
goto out_warn;
|
goto out_warn;
|
||||||
}
|
}
|
||||||
|
|
@ -259,8 +260,8 @@ static int ovl_lookup_single(struct dentry *base, struct ovl_lookup_data *d,
|
||||||
goto out_err;
|
goto out_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ovl_dentry_casefolded(this)) {
|
if (ofs->casefold != ovl_dentry_casefolded(this)) {
|
||||||
warn = "case folded child";
|
warn = "child wrong casefold";
|
||||||
err = -EREMOTE;
|
err = -EREMOTE;
|
||||||
goto out_warn;
|
goto out_warn;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -210,11 +210,11 @@ bool ovl_dentry_weird(struct dentry *dentry)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allow filesystems that are case-folding capable but deny composing
|
* Exceptionally for layers with casefold, we accept that they have
|
||||||
* ovl stack from case-folded directories.
|
* their own hash and compare operations
|
||||||
*/
|
*/
|
||||||
if (sb_has_encoding(dentry->d_sb))
|
if (sb_has_encoding(dentry->d_sb))
|
||||||
return IS_CASEFOLDED(d_inode(dentry));
|
return false;
|
||||||
|
|
||||||
return dentry->d_flags & (DCACHE_OP_HASH | DCACHE_OP_COMPARE);
|
return dentry->d_flags & (DCACHE_OP_HASH | DCACHE_OP_COMPARE);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user