Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 231518
b: refs/heads/master
c: 71e469d
h: refs/heads/master
v: v3
  • Loading branch information
Ian Kent authored and Al Viro committed Jan 16, 2011
1 parent e12aa38 commit a8d26a6
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 30 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e61da20a50d21725ff27571a6dff9468e4fb7146
refs/heads/master: 71e469db242c2eeb00faf9caf7d9e00150c00a6e
7 changes: 2 additions & 5 deletions trunk/fs/autofs4/autofs_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -206,11 +206,8 @@ extern const struct inode_operations autofs4_symlink_inode_operations;
extern const struct inode_operations autofs4_dir_inode_operations;
extern const struct file_operations autofs4_dir_operations;
extern const struct file_operations autofs4_root_operations;

/* Operations methods */

struct vfsmount *autofs4_d_automount(struct path *);
int autofs4_d_manage(struct dentry *, bool);
extern const struct dentry_operations autofs4_dentry_operations;
extern const struct dentry_operations autofs4_mount_dentry_operations;

/* VFS automount flags management functions */

Expand Down
12 changes: 4 additions & 8 deletions trunk/fs/autofs4/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -251,12 +251,6 @@ static struct autofs_info *autofs4_mkroot(struct autofs_sb_info *sbi)
return ino;
}

static const struct dentry_operations autofs4_sb_dentry_operations = {
.d_automount = autofs4_d_automount,
.d_manage = autofs4_d_manage,
.d_release = autofs4_dentry_release,
};

int autofs4_fill_super(struct super_block *s, void *data, int silent)
{
struct inode * root_inode;
Expand Down Expand Up @@ -311,7 +305,7 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent)
goto fail_iput;
pipe = NULL;

d_set_d_op(root, &autofs4_sb_dentry_operations);
d_set_d_op(root, &autofs4_dentry_operations);
root->d_fsdata = ino;

/* Can this call block? */
Expand All @@ -322,8 +316,10 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent)
goto fail_dput;
}

if (autofs_type_trigger(sbi->type))
if (autofs_type_trigger(sbi->type)) {
d_set_d_op(root, &autofs4_mount_dentry_operations);
__managed_dentry_set_managed(root);
}

root_inode->i_fop = &autofs4_root_operations;
root_inode->i_op = &autofs4_dir_inode_operations;
Expand Down
36 changes: 20 additions & 16 deletions trunk/fs/autofs4/root.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ static long autofs4_root_compat_ioctl(struct file *,unsigned int,unsigned long);
#endif
static int autofs4_dir_open(struct inode *inode, struct file *file);
static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata *);
static struct vfsmount *autofs4_d_automount(struct path *);
static int autofs4_d_manage(struct dentry *, bool);

const struct file_operations autofs4_root_operations = {
.open = dcache_dir_open,
Expand Down Expand Up @@ -64,6 +66,18 @@ const struct inode_operations autofs4_dir_inode_operations = {
.rmdir = autofs4_dir_rmdir,
};

/* For dentries that don't initiate mounting */
const struct dentry_operations autofs4_dentry_operations = {
.d_release = autofs4_dentry_release,
};

/* For dentries that do initiate mounting */
const struct dentry_operations autofs4_mount_dentry_operations = {
.d_automount = autofs4_d_automount,
.d_manage = autofs4_d_manage,
.d_release = autofs4_dentry_release,
};

static void autofs4_add_active(struct dentry *dentry)
{
struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
Expand Down Expand Up @@ -158,18 +172,6 @@ void autofs4_dentry_release(struct dentry *de)
}
}

/* For dentries of directories in the root dir */
static const struct dentry_operations autofs4_root_dentry_operations = {
.d_release = autofs4_dentry_release,
};

/* For other dentries */
static const struct dentry_operations autofs4_dentry_operations = {
.d_automount = autofs4_d_automount,
.d_manage = autofs4_d_manage,
.d_release = autofs4_dentry_release,
};

static struct dentry *autofs4_lookup_active(struct dentry *dentry)
{
struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
Expand Down Expand Up @@ -337,7 +339,7 @@ static struct dentry *autofs4_mountpoint_changed(struct path *path)
return path->dentry;
}

struct vfsmount *autofs4_d_automount(struct path *path)
static struct vfsmount *autofs4_d_automount(struct path *path)
{
struct dentry *dentry = path->dentry;
struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
Expand Down Expand Up @@ -501,7 +503,7 @@ static struct dentry *autofs4_lookup(struct inode *dir, struct dentry *dentry, s
if (active) {
return active;
} else {
d_set_d_op(dentry, &autofs4_root_dentry_operations);
d_set_d_op(dentry, &autofs4_dentry_operations);

/*
* A dentry that is not within the root can never trigger a
Expand All @@ -514,7 +516,7 @@ static struct dentry *autofs4_lookup(struct inode *dir, struct dentry *dentry, s

/* Mark entries in the root as mount triggers */
if (autofs_type_indirect(sbi->type) && IS_ROOT(dentry->d_parent)) {
d_set_d_op(dentry, &autofs4_dentry_operations);
d_set_d_op(dentry, &autofs4_mount_dentry_operations);
__managed_dentry_set_managed(dentry);
}

Expand Down Expand Up @@ -573,6 +575,8 @@ static int autofs4_dir_symlink(struct inode *dir,
}
d_add(dentry, inode);

d_set_d_op(dentry, &autofs4_dentry_operations);

dentry->d_fsdata = ino;
ino->dentry = dget(dentry);
atomic_inc(&ino->count);
Expand Down Expand Up @@ -791,7 +795,7 @@ static inline int autofs4_ask_umount(struct vfsmount *mnt, int __user *p)
int is_autofs4_dentry(struct dentry *dentry)
{
return dentry && dentry->d_inode &&
(dentry->d_op == &autofs4_root_dentry_operations ||
(dentry->d_op == &autofs4_mount_dentry_operations ||
dentry->d_op == &autofs4_dentry_operations) &&
dentry->d_fsdata != NULL;
}
Expand Down

0 comments on commit a8d26a6

Please sign in to comment.