|
@@ -749,15 +749,17 @@ static bool ovl_hash_bylower(struct super_block *sb, struct dentry *upper,
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-struct inode *ovl_get_inode(struct super_block *sb, struct dentry *upperdentry,
|
|
|
- struct ovl_path *lowerpath, struct dentry *index,
|
|
|
- unsigned int numlower)
|
|
|
+struct inode *ovl_get_inode(struct super_block *sb,
|
|
|
+ struct ovl_inode_params *oip)
|
|
|
{
|
|
|
+ struct dentry *upperdentry = oip->upperdentry;
|
|
|
+ struct ovl_path *lowerpath = oip->lowerpath;
|
|
|
struct inode *realinode = upperdentry ? d_inode(upperdentry) : NULL;
|
|
|
struct inode *inode;
|
|
|
struct dentry *lowerdentry = lowerpath ? lowerpath->dentry : NULL;
|
|
|
- bool bylower = ovl_hash_bylower(sb, upperdentry, lowerdentry, index);
|
|
|
- int fsid = bylower ? lowerpath->layer->fsid : 0;
|
|
|
+ bool bylower = ovl_hash_bylower(sb, upperdentry, lowerdentry,
|
|
|
+ oip->index);
|
|
|
+ int fsid = bylower ? oip->lowerpath->layer->fsid : 0;
|
|
|
bool is_dir;
|
|
|
unsigned long ino = 0;
|
|
|
|
|
@@ -774,8 +776,8 @@ struct inode *ovl_get_inode(struct super_block *sb, struct dentry *upperdentry,
|
|
|
upperdentry);
|
|
|
unsigned int nlink = is_dir ? 1 : realinode->i_nlink;
|
|
|
|
|
|
- inode = iget5_locked(sb, (unsigned long) key,
|
|
|
- ovl_inode_test, ovl_inode_set, key);
|
|
|
+ inode = iget5_locked(sb, (unsigned long) key, ovl_inode_test,
|
|
|
+ ovl_inode_set, key);
|
|
|
if (!inode)
|
|
|
goto out_nomem;
|
|
|
if (!(inode->i_state & I_NEW)) {
|
|
@@ -811,12 +813,12 @@ struct inode *ovl_get_inode(struct super_block *sb, struct dentry *upperdentry,
|
|
|
if (upperdentry && ovl_is_impuredir(upperdentry))
|
|
|
ovl_set_flag(OVL_IMPURE, inode);
|
|
|
|
|
|
- if (index)
|
|
|
+ if (oip->index)
|
|
|
ovl_set_flag(OVL_INDEX, inode);
|
|
|
|
|
|
/* Check for non-merge dir that may have whiteouts */
|
|
|
if (is_dir) {
|
|
|
- if (((upperdentry && lowerdentry) || numlower > 1) ||
|
|
|
+ if (((upperdentry && lowerdentry) || oip->numlower > 1) ||
|
|
|
ovl_check_origin_xattr(upperdentry ?: lowerdentry)) {
|
|
|
ovl_set_flag(OVL_WHITEOUTS, inode);
|
|
|
}
|