mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-11-20 00:26:39 +08:00
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: Ian Kent <raven@themaw.net> Signed-off-by: Jeff Moyer <jmoyer@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
00fcf2cb6f
commit
56fcef7511
@ -186,6 +186,8 @@ int autofs4_expire_wait(struct dentry *dentry);
|
||||
int autofs4_expire_run(struct super_block *, struct vfsmount *,
|
||||
struct autofs_sb_info *,
|
||||
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 *,
|
||||
struct autofs_sb_info *, int __user *);
|
||||
struct dentry *autofs4_expire_direct(struct super_block *sb,
|
||||
|
@ -525,40 +525,13 @@ static int autofs_dev_ioctl_expire(struct file *fp,
|
||||
struct autofs_sb_info *sbi,
|
||||
struct autofs_dev_ioctl *param)
|
||||
{
|
||||
struct dentry *dentry;
|
||||
struct vfsmount *mnt;
|
||||
int err = -EAGAIN;
|
||||
int how;
|
||||
|
||||
how = param->expire.how;
|
||||
mnt = fp->f_path.mnt;
|
||||
|
||||
if (autofs_type_trigger(sbi->type))
|
||||
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;
|
||||
return autofs4_do_expire_multi(sbi->sb, mnt, sbi, how);
|
||||
}
|
||||
|
||||
/* Check if autofs mount point is in use */
|
||||
|
@ -478,22 +478,16 @@ int autofs4_expire_run(struct super_block *sb,
|
||||
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 autofs4_do_expire_multi(struct super_block *sb, struct vfsmount *mnt,
|
||||
struct autofs_sb_info *sbi, int when)
|
||||
{
|
||||
struct dentry *dentry;
|
||||
int ret = -EAGAIN;
|
||||
int do_now = 0;
|
||||
|
||||
if (arg && get_user(do_now, arg))
|
||||
return -EFAULT;
|
||||
|
||||
if (autofs_type_trigger(sbi->type))
|
||||
dentry = autofs4_expire_direct(sb, mnt, sbi, do_now);
|
||||
dentry = autofs4_expire_direct(sb, mnt, sbi, when);
|
||||
else
|
||||
dentry = autofs4_expire_indirect(sb, mnt, sbi, do_now);
|
||||
dentry = autofs4_expire_indirect(sb, mnt, sbi, when);
|
||||
|
||||
if (dentry) {
|
||||
struct autofs_info *ino = autofs4_dentry_ino(dentry);
|
||||
@ -516,3 +510,16 @@ int autofs4_expire_multi(struct super_block *sb, struct vfsmount *mnt,
|
||||
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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user