ovl: helper to iterate layers
Add helper to iterate through all the layers, starting from the upper layer (if exists) and continuing down through the lower layers. Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
This commit is contained in:
parent
dd662667e6
commit
5ef88da56a
2 changed files with 22 additions and 0 deletions
|
@ -135,6 +135,7 @@ void ovl_dentry_version_inc(struct dentry *dentry);
|
||||||
void ovl_path_upper(struct dentry *dentry, struct path *path);
|
void ovl_path_upper(struct dentry *dentry, struct path *path);
|
||||||
void ovl_path_lower(struct dentry *dentry, struct path *path);
|
void ovl_path_lower(struct dentry *dentry, struct path *path);
|
||||||
enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path);
|
enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path);
|
||||||
|
int ovl_path_next(int idx, struct dentry *dentry, struct path *path);
|
||||||
struct dentry *ovl_dentry_upper(struct dentry *dentry);
|
struct dentry *ovl_dentry_upper(struct dentry *dentry);
|
||||||
struct dentry *ovl_dentry_lower(struct dentry *dentry);
|
struct dentry *ovl_dentry_lower(struct dentry *dentry);
|
||||||
struct dentry *ovl_dentry_real(struct dentry *dentry);
|
struct dentry *ovl_dentry_real(struct dentry *dentry);
|
||||||
|
|
|
@ -305,6 +305,27 @@ static inline struct dentry *ovl_lookup_real(struct dentry *dir,
|
||||||
return dentry;
|
return dentry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns next layer in stack starting from top.
|
||||||
|
* Returns -1 if this is the last layer.
|
||||||
|
*/
|
||||||
|
int ovl_path_next(int idx, struct dentry *dentry, struct path *path)
|
||||||
|
{
|
||||||
|
struct ovl_entry *oe = dentry->d_fsdata;
|
||||||
|
|
||||||
|
BUG_ON(idx < 0);
|
||||||
|
if (idx == 0) {
|
||||||
|
ovl_path_upper(dentry, path);
|
||||||
|
if (path->dentry)
|
||||||
|
return oe->numlower ? 1 : -1;
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
BUG_ON(idx > oe->numlower);
|
||||||
|
*path = oe->lowerstack[idx - 1];
|
||||||
|
|
||||||
|
return (idx < oe->numlower) ? idx + 1 : -1;
|
||||||
|
}
|
||||||
|
|
||||||
struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
|
struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue