ovl: warn if trusted xattr creation fails
When mounting overlayfs in an unprivileged user namespace, trusted xattr creation will fail. This will lead to failures in some file operations, e.g. in the following situation: mkdir lower upper work merged mkdir lower/directory mount -toverlay -olowerdir=lower,upperdir=upper,workdir=work none merged rmdir merged/directory mkdir merged/directory The last mkdir will fail: mkdir: cannot create directory 'merged/directory': Input/output error The cause for these failures is currently extremely non-obvious and hard to debug. Hence, warn the user and suggest using the userxattr mount option, if it is not already supplied and xattr creation fails during the self-check. Reported-by: Alois Wohlschlager <alois1@gmx-topmail.de> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
e0dccc3b76
commit
b10b85fe51
@ -1418,11 +1418,12 @@ static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs,
|
|||||||
*/
|
*/
|
||||||
err = ovl_setxattr(ofs, ofs->workdir, OVL_XATTR_OPAQUE, "0", 1);
|
err = ovl_setxattr(ofs, ofs->workdir, OVL_XATTR_OPAQUE, "0", 1);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
pr_warn("failed to set xattr on upper\n");
|
||||||
ofs->noxattr = true;
|
ofs->noxattr = true;
|
||||||
if (ofs->config.index || ofs->config.metacopy) {
|
if (ofs->config.index || ofs->config.metacopy) {
|
||||||
ofs->config.index = false;
|
ofs->config.index = false;
|
||||||
ofs->config.metacopy = false;
|
ofs->config.metacopy = false;
|
||||||
pr_warn("upper fs does not support xattr, falling back to index=off,metacopy=off.\n");
|
pr_warn("...falling back to index=off,metacopy=off.\n");
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* xattr support is required for persistent st_ino.
|
* xattr support is required for persistent st_ino.
|
||||||
@ -1430,8 +1431,10 @@ static int ovl_make_workdir(struct super_block *sb, struct ovl_fs *ofs,
|
|||||||
*/
|
*/
|
||||||
if (ofs->config.xino == OVL_XINO_AUTO) {
|
if (ofs->config.xino == OVL_XINO_AUTO) {
|
||||||
ofs->config.xino = OVL_XINO_OFF;
|
ofs->config.xino = OVL_XINO_OFF;
|
||||||
pr_warn("upper fs does not support xattr, falling back to xino=off.\n");
|
pr_warn("...falling back to xino=off.\n");
|
||||||
}
|
}
|
||||||
|
if (err == -EPERM && !ofs->config.userxattr)
|
||||||
|
pr_info("try mounting with 'userxattr' option\n");
|
||||||
err = 0;
|
err = 0;
|
||||||
} else {
|
} else {
|
||||||
ovl_removexattr(ofs, ofs->workdir, OVL_XATTR_OPAQUE);
|
ovl_removexattr(ofs, ofs->workdir, OVL_XATTR_OPAQUE);
|
||||||
|
Loading…
Reference in New Issue
Block a user