autofs4: Pushdown the bkl from ioctl

Pushdown the bkl to autofs4_root_ioctl.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ian Kent <raven@themaw.net>
Cc: Autofs <autofs@linux.kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: John Kacur <jkacur@redhat.com>
Cc: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
Frederic Weisbecker 2010-05-19 15:08:17 +02:00
parent d6c89d9aca
commit 3663df70c0
1 changed files with 18 additions and 4 deletions

View File

@ -18,13 +18,14 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/param.h> #include <linux/param.h>
#include <linux/time.h> #include <linux/time.h>
#include <linux/smp_lock.h>
#include "autofs_i.h" #include "autofs_i.h"
static int autofs4_dir_symlink(struct inode *,struct dentry *,const char *); static int autofs4_dir_symlink(struct inode *,struct dentry *,const char *);
static int autofs4_dir_unlink(struct inode *,struct dentry *); static int autofs4_dir_unlink(struct inode *,struct dentry *);
static int autofs4_dir_rmdir(struct inode *,struct dentry *); 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 long autofs4_root_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 void *autofs4_follow_link(struct dentry *, struct nameidata *); static void *autofs4_follow_link(struct dentry *, struct nameidata *);
@ -38,7 +39,7 @@ const struct file_operations autofs4_root_operations = {
.read = generic_read_dir, .read = generic_read_dir,
.readdir = dcache_readdir, .readdir = dcache_readdir,
.llseek = dcache_dir_lseek, .llseek = dcache_dir_lseek,
.ioctl = autofs4_root_ioctl, .unlocked_ioctl = autofs4_root_ioctl,
}; };
const struct file_operations autofs4_dir_operations = { const struct file_operations autofs4_dir_operations = {
@ -902,8 +903,8 @@ int is_autofs4_dentry(struct dentry *dentry)
* ioctl()'s on the root directory is the chief method for the daemon to * ioctl()'s on the root directory is the chief method for the daemon to
* generate kernel reactions * generate kernel reactions
*/ */
static int autofs4_root_ioctl(struct inode *inode, struct file *filp, static int autofs4_root_ioctl_unlocked(struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct autofs_sb_info *sbi = autofs4_sbi(inode->i_sb); struct autofs_sb_info *sbi = autofs4_sbi(inode->i_sb);
void __user *p = (void __user *)arg; void __user *p = (void __user *)arg;
@ -947,3 +948,16 @@ static int autofs4_root_ioctl(struct inode *inode, struct file *filp,
return -ENOSYS; return -ENOSYS;
} }
} }
static long autofs4_root_ioctl(struct file *filp,
unsigned int cmd, unsigned long arg)
{
long ret;
struct inode *inode = filp->f_dentry->d_inode;
lock_kernel();
ret = autofs4_root_ioctl_unlocked(inode, filp, cmd, arg);
unlock_kernel();
return ret;
}