diff options
Diffstat (limited to 'fs/overlayfs/util.c')
| -rw-r--r-- | fs/overlayfs/util.c | 33 | 
1 files changed, 10 insertions, 23 deletions
diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c index 7f5a01a11f97..b9d03627f364 100644 --- a/fs/overlayfs/util.c +++ b/fs/overlayfs/util.c @@ -214,7 +214,7 @@ const struct ovl_layer *ovl_layer_lower(struct dentry *dentry)  /*   * ovl_dentry_lower() could return either a data dentry or metacopy dentry - * dependig on what is stored in lowerstack[0]. At times we need to find + * depending on what is stored in lowerstack[0]. At times we need to find   * lower dentry which has data (and not metacopy dentry). This helper   * returns the lower data dentry.   */ @@ -422,18 +422,20 @@ void ovl_inode_update(struct inode *inode, struct dentry *upperdentry)  	}  } -static void ovl_dentry_version_inc(struct dentry *dentry, bool impurity) +static void ovl_dir_version_inc(struct dentry *dentry, bool impurity)  {  	struct inode *inode = d_inode(dentry);  	WARN_ON(!inode_is_locked(inode)); +	WARN_ON(!d_is_dir(dentry));  	/* -	 * Version is used by readdir code to keep cache consistent.  For merge -	 * dirs all changes need to be noted.  For non-merge dirs, cache only -	 * contains impure (ones which have been copied up and have origins) -	 * entries, so only need to note changes to impure entries. +	 * Version is used by readdir code to keep cache consistent. +	 * For merge dirs (or dirs with origin) all changes need to be noted. +	 * For non-merge dirs, cache contains only impure entries (i.e. ones +	 * which have been copied up and have origins), so only need to note +	 * changes to impure entries.  	 */ -	if (OVL_TYPE_MERGE(ovl_path_type(dentry)) || impurity) +	if (!ovl_dir_is_real(dentry) || impurity)  		OVL_I(inode)->version++;  } @@ -442,7 +444,7 @@ void ovl_dir_modified(struct dentry *dentry, bool impurity)  	/* Copy mtime/ctime */  	ovl_copyattr(d_inode(ovl_dentry_upper(dentry)), d_inode(dentry)); -	ovl_dentry_version_inc(dentry, impurity); +	ovl_dir_version_inc(dentry, impurity);  }  u64 ovl_dentry_version_get(struct dentry *dentry) @@ -638,21 +640,6 @@ int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry)  	return err;  } -void ovl_set_flag(unsigned long flag, struct inode *inode) -{ -	set_bit(flag, &OVL_I(inode)->flags); -} - -void ovl_clear_flag(unsigned long flag, struct inode *inode) -{ -	clear_bit(flag, &OVL_I(inode)->flags); -} - -bool ovl_test_flag(unsigned long flag, struct inode *inode) -{ -	return test_bit(flag, &OVL_I(inode)->flags); -} -  /**   * Caller must hold a reference to inode to prevent it from being freed while   * it is marked inuse.  |