|
@@ -25,7 +25,6 @@ static int autofs4_dir_rmdir(struct inode *,struct dentry *);
|
|
static int autofs4_dir_mkdir(struct inode *,struct dentry *,int);
|
|
static int autofs4_dir_mkdir(struct inode *,struct dentry *,int);
|
|
static int autofs4_root_ioctl(struct inode *, struct file *,unsigned int,unsigned long);
|
|
static int autofs4_root_ioctl(struct inode *, 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 int autofs4_root_readdir(struct file * filp, void * dirent, filldir_t filldir);
|
|
|
|
static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata *);
|
|
static struct dentry *autofs4_lookup(struct inode *,struct dentry *, struct nameidata *);
|
|
static void *autofs4_follow_link(struct dentry *, struct nameidata *);
|
|
static void *autofs4_follow_link(struct dentry *, struct nameidata *);
|
|
|
|
|
|
@@ -36,7 +35,7 @@ const struct file_operations autofs4_root_operations = {
|
|
.open = dcache_dir_open,
|
|
.open = dcache_dir_open,
|
|
.release = dcache_dir_close,
|
|
.release = dcache_dir_close,
|
|
.read = generic_read_dir,
|
|
.read = generic_read_dir,
|
|
- .readdir = autofs4_root_readdir,
|
|
|
|
|
|
+ .readdir = dcache_readdir,
|
|
.ioctl = autofs4_root_ioctl,
|
|
.ioctl = autofs4_root_ioctl,
|
|
};
|
|
};
|
|
|
|
|
|
@@ -71,28 +70,6 @@ const struct inode_operations autofs4_dir_inode_operations = {
|
|
.rmdir = autofs4_dir_rmdir,
|
|
.rmdir = autofs4_dir_rmdir,
|
|
};
|
|
};
|
|
|
|
|
|
-static int autofs4_root_readdir(struct file *file, void *dirent,
|
|
|
|
- filldir_t filldir)
|
|
|
|
-{
|
|
|
|
- struct autofs_sb_info *sbi = autofs4_sbi(file->f_path.dentry->d_sb);
|
|
|
|
- int oz_mode = autofs4_oz_mode(sbi);
|
|
|
|
-
|
|
|
|
- DPRINTK("called, filp->f_pos = %lld", file->f_pos);
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * Don't set reghost flag if:
|
|
|
|
- * 1) f_pos is larger than zero -- we've already been here.
|
|
|
|
- * 2) we haven't even enabled reghosting in the 1st place.
|
|
|
|
- * 3) this is the daemon doing a readdir
|
|
|
|
- */
|
|
|
|
- if (oz_mode && file->f_pos == 0 && sbi->reghost_enabled)
|
|
|
|
- sbi->needs_reghost = 1;
|
|
|
|
-
|
|
|
|
- DPRINTK("needs_reghost = %d", sbi->needs_reghost);
|
|
|
|
-
|
|
|
|
- return dcache_readdir(file, dirent, filldir);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static int autofs4_dir_open(struct inode *inode, struct file *file)
|
|
static int autofs4_dir_open(struct inode *inode, struct file *file)
|
|
{
|
|
{
|
|
struct dentry *dentry = file->f_path.dentry;
|
|
struct dentry *dentry = file->f_path.dentry;
|
|
@@ -858,44 +835,6 @@ static inline int autofs4_get_protosubver(struct autofs_sb_info *sbi, int __user
|
|
return put_user(sbi->sub_version, p);
|
|
return put_user(sbi->sub_version, p);
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Tells the daemon whether we need to reghost or not. Also, clears
|
|
|
|
- * the reghost_needed flag.
|
|
|
|
- */
|
|
|
|
-static inline int autofs4_ask_reghost(struct autofs_sb_info *sbi, int __user *p)
|
|
|
|
-{
|
|
|
|
- int status;
|
|
|
|
-
|
|
|
|
- DPRINTK("returning %d", sbi->needs_reghost);
|
|
|
|
-
|
|
|
|
- status = put_user(sbi->needs_reghost, p);
|
|
|
|
- if (status)
|
|
|
|
- return status;
|
|
|
|
-
|
|
|
|
- sbi->needs_reghost = 0;
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/*
|
|
|
|
- * Enable / Disable reghosting ioctl() operation
|
|
|
|
- */
|
|
|
|
-static inline int autofs4_toggle_reghost(struct autofs_sb_info *sbi, int __user *p)
|
|
|
|
-{
|
|
|
|
- int status;
|
|
|
|
- int val;
|
|
|
|
-
|
|
|
|
- status = get_user(val, p);
|
|
|
|
-
|
|
|
|
- DPRINTK("reghost = %d", val);
|
|
|
|
-
|
|
|
|
- if (status)
|
|
|
|
- return status;
|
|
|
|
-
|
|
|
|
- /* turn on/off reghosting, with the val */
|
|
|
|
- sbi->reghost_enabled = val;
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Tells the daemon whether it can umount the autofs mount.
|
|
* Tells the daemon whether it can umount the autofs mount.
|
|
*/
|
|
*/
|
|
@@ -960,11 +899,6 @@ static int autofs4_root_ioctl(struct inode *inode, struct file *filp,
|
|
case AUTOFS_IOC_SETTIMEOUT:
|
|
case AUTOFS_IOC_SETTIMEOUT:
|
|
return autofs4_get_set_timeout(sbi, p);
|
|
return autofs4_get_set_timeout(sbi, p);
|
|
|
|
|
|
- case AUTOFS_IOC_TOGGLEREGHOST:
|
|
|
|
- return autofs4_toggle_reghost(sbi, p);
|
|
|
|
- case AUTOFS_IOC_ASKREGHOST:
|
|
|
|
- return autofs4_ask_reghost(sbi, p);
|
|
|
|
-
|
|
|
|
case AUTOFS_IOC_ASKUMOUNT:
|
|
case AUTOFS_IOC_ASKUMOUNT:
|
|
return autofs4_ask_umount(filp->f_path.mnt, p);
|
|
return autofs4_ask_umount(filp->f_path.mnt, p);
|
|
|
|
|