Commit 56fcef75 authored by Ian Kent's avatar Ian Kent Committed by Linus Torvalds

autofs4: cleanup expire code duplication

A significant portion of the autofs_dev_ioctl_expire() and
autofs4_expire_multi() functions is duplicated code.  This patch cleans that
up.
Signed-off-by: default avatarIan Kent <raven@themaw.net>
Signed-off-by: default avatarJeff Moyer <jmoyer@redhat.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 00fcf2cb
...@@ -186,6 +186,8 @@ int autofs4_expire_wait(struct dentry *dentry); ...@@ -186,6 +186,8 @@ int autofs4_expire_wait(struct dentry *dentry);
int autofs4_expire_run(struct super_block *, struct vfsmount *, int autofs4_expire_run(struct super_block *, struct vfsmount *,
struct autofs_sb_info *, struct autofs_sb_info *,
struct autofs_packet_expire __user *); struct autofs_packet_expire __user *);
int autofs4_do_expire_multi(struct super_block *sb, struct vfsmount *mnt,
struct autofs_sb_info *sbi, int when);
int autofs4_expire_multi(struct super_block *, struct vfsmount *, int autofs4_expire_multi(struct super_block *, struct vfsmount *,
struct autofs_sb_info *, int __user *); struct autofs_sb_info *, int __user *);
struct dentry *autofs4_expire_direct(struct super_block *sb, struct dentry *autofs4_expire_direct(struct super_block *sb,
......
...@@ -525,40 +525,13 @@ static int autofs_dev_ioctl_expire(struct file *fp, ...@@ -525,40 +525,13 @@ static int autofs_dev_ioctl_expire(struct file *fp,
struct autofs_sb_info *sbi, struct autofs_sb_info *sbi,
struct autofs_dev_ioctl *param) struct autofs_dev_ioctl *param)
{ {
struct dentry *dentry;
struct vfsmount *mnt; struct vfsmount *mnt;
int err = -EAGAIN;
int how; int how;
how = param->expire.how; how = param->expire.how;
mnt = fp->f_path.mnt; mnt = fp->f_path.mnt;
if (autofs_type_trigger(sbi->type)) return autofs4_do_expire_multi(sbi->sb, mnt, sbi, how);
dentry = autofs4_expire_direct(sbi->sb, mnt, sbi, how);
else
dentry = autofs4_expire_indirect(sbi->sb, mnt, sbi, how);
if (dentry) {
struct autofs_info *ino = autofs4_dentry_ino(dentry);
/*
* This is synchronous because it makes the daemon a
* little easier
*/
err = autofs4_wait(sbi, dentry, NFY_EXPIRE);
spin_lock(&sbi->fs_lock);
if (ino->flags & AUTOFS_INF_MOUNTPOINT) {
ino->flags &= ~AUTOFS_INF_MOUNTPOINT;
sbi->sb->s_root->d_mounted++;
}
ino->flags &= ~AUTOFS_INF_EXPIRING;
complete_all(&ino->expire_complete);
spin_unlock(&sbi->fs_lock);
dput(dentry);
}
return err;
} }
/* Check if autofs mount point is in use */ /* Check if autofs mount point is in use */
......
...@@ -478,22 +478,16 @@ int autofs4_expire_run(struct super_block *sb, ...@@ -478,22 +478,16 @@ int autofs4_expire_run(struct super_block *sb,
return ret; return ret;
} }
/* Call repeatedly until it returns -EAGAIN, meaning there's nothing int autofs4_do_expire_multi(struct super_block *sb, struct vfsmount *mnt,
more to be done */ struct autofs_sb_info *sbi, int when)
int autofs4_expire_multi(struct super_block *sb, struct vfsmount *mnt,
struct autofs_sb_info *sbi, int __user *arg)
{ {
struct dentry *dentry; struct dentry *dentry;
int ret = -EAGAIN; int ret = -EAGAIN;
int do_now = 0;
if (arg && get_user(do_now, arg))
return -EFAULT;
if (autofs_type_trigger(sbi->type)) if (autofs_type_trigger(sbi->type))
dentry = autofs4_expire_direct(sb, mnt, sbi, do_now); dentry = autofs4_expire_direct(sb, mnt, sbi, when);
else else
dentry = autofs4_expire_indirect(sb, mnt, sbi, do_now); dentry = autofs4_expire_indirect(sb, mnt, sbi, when);
if (dentry) { if (dentry) {
struct autofs_info *ino = autofs4_dentry_ino(dentry); struct autofs_info *ino = autofs4_dentry_ino(dentry);
...@@ -516,3 +510,16 @@ int autofs4_expire_multi(struct super_block *sb, struct vfsmount *mnt, ...@@ -516,3 +510,16 @@ int autofs4_expire_multi(struct super_block *sb, struct vfsmount *mnt,
return ret; return ret;
} }
/* Call repeatedly until it returns -EAGAIN, meaning there's nothing
more to be done */
int autofs4_expire_multi(struct super_block *sb, struct vfsmount *mnt,
struct autofs_sb_info *sbi, int __user *arg)
{
int do_now = 0;
if (arg && get_user(do_now, arg))
return -EFAULT;
return autofs4_do_expire_multi(sb, mnt, sbi, do_now);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment