lose 'mounting_here' argument in ->d_manage()
it's always false... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
7cc90cc3ff
commit
1aed3e4204
|
@ -873,7 +873,7 @@ struct dentry_operations {
|
||||||
void (*d_iput)(struct dentry *, struct inode *);
|
void (*d_iput)(struct dentry *, struct inode *);
|
||||||
char *(*d_dname)(struct dentry *, char *, int);
|
char *(*d_dname)(struct dentry *, char *, int);
|
||||||
struct vfsmount *(*d_automount)(struct path *);
|
struct vfsmount *(*d_automount)(struct path *);
|
||||||
int (*d_manage)(struct dentry *, bool, bool);
|
int (*d_manage)(struct dentry *, bool);
|
||||||
};
|
};
|
||||||
|
|
||||||
d_revalidate: called when the VFS needs to revalidate a dentry. This
|
d_revalidate: called when the VFS needs to revalidate a dentry. This
|
||||||
|
@ -969,10 +969,6 @@ struct dentry_operations {
|
||||||
mounted on it and not to check the automount flag. Any other error
|
mounted on it and not to check the automount flag. Any other error
|
||||||
code will abort pathwalk completely.
|
code will abort pathwalk completely.
|
||||||
|
|
||||||
If the 'mounting_here' parameter is true, then namespace_sem is being
|
|
||||||
held by the caller and the function should not initiate any mounts or
|
|
||||||
unmounts that it will then wait for.
|
|
||||||
|
|
||||||
If the 'rcu_walk' parameter is true, then the caller is doing a
|
If the 'rcu_walk' parameter is true, then the caller is doing a
|
||||||
pathwalk in RCU-walk mode. Sleeping is not permitted in this mode,
|
pathwalk in RCU-walk mode. Sleeping is not permitted in this mode,
|
||||||
and the caller can be asked to leave it and call again by returing
|
and the caller can be asked to leave it and call again by returing
|
||||||
|
|
|
@ -36,7 +36,7 @@ static long autofs4_root_compat_ioctl(struct file *,unsigned int,unsigned long);
|
||||||
static int autofs4_dir_open(struct inode *inode, struct file *file);
|
static int autofs4_dir_open(struct inode *inode, struct file *file);
|
||||||
static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata *);
|
static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata *);
|
||||||
static struct vfsmount *autofs4_d_automount(struct path *);
|
static struct vfsmount *autofs4_d_automount(struct path *);
|
||||||
static int autofs4_d_manage(struct dentry *, bool, bool);
|
static int autofs4_d_manage(struct dentry *, bool);
|
||||||
static void autofs4_dentry_release(struct dentry *);
|
static void autofs4_dentry_release(struct dentry *);
|
||||||
|
|
||||||
const struct file_operations autofs4_root_operations = {
|
const struct file_operations autofs4_root_operations = {
|
||||||
|
@ -446,7 +446,7 @@ done:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int autofs4_d_manage(struct dentry *dentry, bool mounting_here, bool rcu_walk)
|
int autofs4_d_manage(struct dentry *dentry, bool rcu_walk)
|
||||||
{
|
{
|
||||||
struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
|
struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
|
||||||
|
|
||||||
|
@ -454,7 +454,7 @@ int autofs4_d_manage(struct dentry *dentry, bool mounting_here, bool rcu_walk)
|
||||||
dentry, dentry->d_name.len, dentry->d_name.name);
|
dentry, dentry->d_name.len, dentry->d_name.name);
|
||||||
|
|
||||||
/* The daemon never waits. */
|
/* The daemon never waits. */
|
||||||
if (autofs4_oz_mode(sbi) || mounting_here) {
|
if (autofs4_oz_mode(sbi)) {
|
||||||
if (!d_mountpoint(dentry))
|
if (!d_mountpoint(dentry))
|
||||||
return -EISDIR;
|
return -EISDIR;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -933,8 +933,7 @@ static int follow_managed(struct path *path, unsigned flags)
|
||||||
if (managed & DCACHE_MANAGE_TRANSIT) {
|
if (managed & DCACHE_MANAGE_TRANSIT) {
|
||||||
BUG_ON(!path->dentry->d_op);
|
BUG_ON(!path->dentry->d_op);
|
||||||
BUG_ON(!path->dentry->d_op->d_manage);
|
BUG_ON(!path->dentry->d_op->d_manage);
|
||||||
ret = path->dentry->d_op->d_manage(path->dentry,
|
ret = path->dentry->d_op->d_manage(path->dentry, false);
|
||||||
false, false);
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret == -EISDIR ? 0 : ret;
|
return ret == -EISDIR ? 0 : ret;
|
||||||
}
|
}
|
||||||
|
@ -999,7 +998,7 @@ static bool __follow_mount_rcu(struct nameidata *nd, struct path *path,
|
||||||
struct vfsmount *mounted;
|
struct vfsmount *mounted;
|
||||||
if (unlikely(path->dentry->d_flags & DCACHE_MANAGE_TRANSIT) &&
|
if (unlikely(path->dentry->d_flags & DCACHE_MANAGE_TRANSIT) &&
|
||||||
!reverse_transit &&
|
!reverse_transit &&
|
||||||
path->dentry->d_op->d_manage(path->dentry, false, true) < 0)
|
path->dentry->d_op->d_manage(path->dentry, true) < 0)
|
||||||
return false;
|
return false;
|
||||||
mounted = __lookup_mnt(path->mnt, path->dentry, 1);
|
mounted = __lookup_mnt(path->mnt, path->dentry, 1);
|
||||||
if (!mounted)
|
if (!mounted)
|
||||||
|
@ -1086,7 +1085,7 @@ int follow_down(struct path *path)
|
||||||
BUG_ON(!path->dentry->d_op);
|
BUG_ON(!path->dentry->d_op);
|
||||||
BUG_ON(!path->dentry->d_op->d_manage);
|
BUG_ON(!path->dentry->d_op->d_manage);
|
||||||
ret = path->dentry->d_op->d_manage(
|
ret = path->dentry->d_op->d_manage(
|
||||||
path->dentry, false, false);
|
path->dentry, false);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret == -EISDIR ? 0 : ret;
|
return ret == -EISDIR ? 0 : ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,7 +168,7 @@ struct dentry_operations {
|
||||||
void (*d_iput)(struct dentry *, struct inode *);
|
void (*d_iput)(struct dentry *, struct inode *);
|
||||||
char *(*d_dname)(struct dentry *, char *, int);
|
char *(*d_dname)(struct dentry *, char *, int);
|
||||||
struct vfsmount *(*d_automount)(struct path *);
|
struct vfsmount *(*d_automount)(struct path *);
|
||||||
int (*d_manage)(struct dentry *, bool, bool);
|
int (*d_manage)(struct dentry *, bool);
|
||||||
} ____cacheline_aligned;
|
} ____cacheline_aligned;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue