mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
ovl: Add S_CASEFOLD as part of the inode flag to be copied
To keep ovl's inodes consistent with their real inodes, create a new mask for inode file attributes that needs to be copied. Add the S_CASEFOLD flag as part of the flags that need to be copied along with the other file attributes. 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:
committed by
Amir Goldstein
parent
8a78f18975
commit
f9377faaea
@@ -670,7 +670,7 @@ static int ovl_copy_up_metadata(struct ovl_copy_up_ctx *c, struct dentry *temp)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
if (inode->i_flags & OVL_COPY_I_FLAGS_MASK &&
|
||||
if (inode->i_flags & OVL_FATTR_I_FLAGS_MASK &&
|
||||
(S_ISREG(c->stat.mode) || S_ISDIR(c->stat.mode))) {
|
||||
/*
|
||||
* Copy the fileattr inode flags that are the source of already
|
||||
|
||||
@@ -1277,6 +1277,7 @@ struct inode *ovl_get_inode(struct super_block *sb,
|
||||
}
|
||||
ovl_fill_inode(inode, realinode->i_mode, realinode->i_rdev);
|
||||
ovl_inode_init(inode, oip, ino, fsid);
|
||||
WARN_ON_ONCE(!!IS_CASEFOLDED(inode) != ofs->casefold);
|
||||
|
||||
if (upperdentry && ovl_is_impuredir(sb, upperdentry))
|
||||
ovl_set_flag(OVL_IMPURE, inode);
|
||||
|
||||
@@ -821,10 +821,12 @@ struct inode *ovl_get_inode(struct super_block *sb,
|
||||
struct ovl_inode_params *oip);
|
||||
void ovl_copyattr(struct inode *to);
|
||||
|
||||
/* vfs fileattr flags read from overlay.protattr xattr to ovl inode */
|
||||
#define OVL_PROT_I_FLAGS_MASK (S_APPEND | S_IMMUTABLE)
|
||||
/* vfs fileattr flags copied from real to ovl inode */
|
||||
#define OVL_FATTR_I_FLAGS_MASK (OVL_PROT_I_FLAGS_MASK | S_SYNC | S_NOATIME)
|
||||
/* vfs inode flags copied from real to ovl inode */
|
||||
#define OVL_COPY_I_FLAGS_MASK (S_SYNC | S_NOATIME | S_APPEND | S_IMMUTABLE)
|
||||
/* vfs inode flags read from overlay.protattr xattr to ovl inode */
|
||||
#define OVL_PROT_I_FLAGS_MASK (S_APPEND | S_IMMUTABLE)
|
||||
#define OVL_COPY_I_FLAGS_MASK (OVL_FATTR_I_FLAGS_MASK | S_CASEFOLD)
|
||||
|
||||
/*
|
||||
* fileattr flags copied from lower to upper inode on copy up.
|
||||
|
||||
@@ -1348,6 +1348,7 @@ static struct dentry *ovl_get_root(struct super_block *sb,
|
||||
ovl_dentry_set_flag(OVL_E_CONNECTED, root);
|
||||
ovl_set_upperdata(d_inode(root));
|
||||
ovl_inode_init(d_inode(root), &oip, ino, fsid);
|
||||
WARN_ON(!!IS_CASEFOLDED(d_inode(root)) != ofs->casefold);
|
||||
ovl_dentry_init_flags(root, upperdentry, oe, DCACHE_OP_WEAK_REVALIDATE);
|
||||
/* root keeps a reference of upperdentry */
|
||||
dget(upperdentry);
|
||||
|
||||
Reference in New Issue
Block a user