From 977183902a52d1e0adc986f9462424db5a545044 Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Tue, 27 Apr 2010 16:24:24 +0200 Subject: coda/psdev: Remove BKL from ioctl function The ioctl function returns constant results, so it obviously does not need the BKL and can be converted to unlocked_ioctl. Signed-off-by: Arnd Bergmann Signed-off-by: Frederic Weisbecker --- fs/coda/psdev.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'fs/coda') diff --git a/fs/coda/psdev.c b/fs/coda/psdev.c index be4392ca2098..66b9cf79c5ba 100644 --- a/fs/coda/psdev.c +++ b/fs/coda/psdev.c @@ -73,8 +73,7 @@ static unsigned int coda_psdev_poll(struct file *file, poll_table * wait) return mask; } -static int coda_psdev_ioctl(struct inode * inode, struct file * filp, - unsigned int cmd, unsigned long arg) +static long coda_psdev_ioctl(struct file * filp, unsigned int cmd, unsigned long arg) { unsigned int data; @@ -344,7 +343,7 @@ static const struct file_operations coda_psdev_fops = { .read = coda_psdev_read, .write = coda_psdev_write, .poll = coda_psdev_poll, - .ioctl = coda_psdev_ioctl, + .unlocked_ioctl = coda_psdev_ioctl, .open = coda_psdev_open, .release = coda_psdev_release, }; -- cgit v1.2.3 From 2ff82f852189226cda3cb192985a4a7fc750ab26 Mon Sep 17 00:00:00 2001 From: John Kacur Date: Wed, 5 May 2010 15:15:34 +0200 Subject: coda: BKL ioctl pushdown Convert coda_pioctl to an unlocked_ioctl pushing down the BKL into it. Signed-off-by: John Kacur Cc: Arnd Bergmann Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Jan Harkes Signed-off-by: Frederic Weisbecker --- fs/coda/pioctl.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) (limited to 'fs/coda') diff --git a/fs/coda/pioctl.c b/fs/coda/pioctl.c index 773f2ce9aa06..96ace2ce7e6c 100644 --- a/fs/coda/pioctl.c +++ b/fs/coda/pioctl.c @@ -23,10 +23,12 @@ #include #include +#include + /* pioctl ops */ static int coda_ioctl_permission(struct inode *inode, int mask); -static int coda_pioctl(struct inode * inode, struct file * filp, - unsigned int cmd, unsigned long user_data); +static long coda_pioctl(struct file *filp, unsigned int cmd, + unsigned long user_data); /* exported from this file */ const struct inode_operations coda_ioctl_inode_operations = @@ -37,7 +39,7 @@ const struct inode_operations coda_ioctl_inode_operations = const struct file_operations coda_ioctl_operations = { .owner = THIS_MODULE, - .ioctl = coda_pioctl, + .unlocked_ioctl = coda_pioctl, }; /* the coda pioctl inode ops */ @@ -46,40 +48,43 @@ static int coda_ioctl_permission(struct inode *inode, int mask) return (mask & MAY_EXEC) ? -EACCES : 0; } -static int coda_pioctl(struct inode * inode, struct file * filp, - unsigned int cmd, unsigned long user_data) +static long coda_pioctl(struct file *filp, unsigned int cmd, + unsigned long user_data) { struct path path; int error; struct PioctlData data; + struct inode *inode = filp->f_dentry->d_inode; struct inode *target_inode = NULL; struct coda_inode_info *cnp; + lock_kernel(); + /* get the Pioctl data arguments from user space */ if (copy_from_user(&data, (void __user *)user_data, sizeof(data))) { - return -EINVAL; + error = -EINVAL; + goto out; } /* * Look up the pathname. Note that the pathname is in * user memory, and namei takes care of this */ - if (data.follow) { + if (data.follow) error = user_path(data.path, &path); - } else { + else error = user_lpath(data.path, &path); - } - - if ( error ) { - return error; - } else { + + if (error) + goto out; + else target_inode = path.dentry->d_inode; - } - + /* return if it is not a Coda inode */ if ( target_inode->i_sb != inode->i_sb ) { path_put(&path); - return -EINVAL; + error = -EINVAL; + goto out; } /* now proceed to make the upcall */ @@ -88,6 +93,8 @@ static int coda_pioctl(struct inode * inode, struct file * filp, error = venus_pioctl(inode->i_sb, &(cnp->c_fid), cmd, &data); path_put(&path); + +out: + unlock_kernel(); return error; } - -- cgit v1.2.3 From 1977bb2ed8ffdd161fe1c9eef1f9fd283e41d4b5 Mon Sep 17 00:00:00 2001 From: John Kacur Date: Wed, 5 May 2010 15:15:35 +0200 Subject: coda: Clean-up whitespace problems in pioctl.c Signed-off-by: John Kacur Cc: Arnd Bergmann Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Jan Harkes Signed-off-by: Frederic Weisbecker --- fs/coda/pioctl.c | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) (limited to 'fs/coda') diff --git a/fs/coda/pioctl.c b/fs/coda/pioctl.c index 96ace2ce7e6c..ca25d96d45c9 100644 --- a/fs/coda/pioctl.c +++ b/fs/coda/pioctl.c @@ -1,6 +1,6 @@ /* * Pioctl operations for Coda. - * Original version: (C) 1996 Peter Braam + * Original version: (C) 1996 Peter Braam * Rewritten for Linux 2.1: (C) 1997 Carnegie Mellon University * * Carnegie Mellon encourages users of this code to contribute improvements @@ -31,8 +31,7 @@ static long coda_pioctl(struct file *filp, unsigned int cmd, unsigned long user_data); /* exported from this file */ -const struct inode_operations coda_ioctl_inode_operations = -{ +const struct inode_operations coda_ioctl_inode_operations = { .permission = coda_ioctl_permission, .setattr = coda_setattr, }; @@ -52,28 +51,28 @@ static long coda_pioctl(struct file *filp, unsigned int cmd, unsigned long user_data) { struct path path; - int error; + int error; struct PioctlData data; struct inode *inode = filp->f_dentry->d_inode; - struct inode *target_inode = NULL; - struct coda_inode_info *cnp; + struct inode *target_inode = NULL; + struct coda_inode_info *cnp; lock_kernel(); - /* get the Pioctl data arguments from user space */ - if (copy_from_user(&data, (void __user *)user_data, sizeof(data))) { + /* get the Pioctl data arguments from user space */ + if (copy_from_user(&data, (void __user *)user_data, sizeof(data))) { error = -EINVAL; goto out; } - - /* - * Look up the pathname. Note that the pathname is in - * user memory, and namei takes care of this - */ + + /* + * Look up the pathname. Note that the pathname is in + * user memory, and namei takes care of this + */ if (data.follow) - error = user_path(data.path, &path); + error = user_path(data.path, &path); else - error = user_lpath(data.path, &path); + error = user_lpath(data.path, &path); if (error) goto out; @@ -81,14 +80,14 @@ static long coda_pioctl(struct file *filp, unsigned int cmd, target_inode = path.dentry->d_inode; /* return if it is not a Coda inode */ - if ( target_inode->i_sb != inode->i_sb ) { + if (target_inode->i_sb != inode->i_sb) { path_put(&path); error = -EINVAL; goto out; } /* now proceed to make the upcall */ - cnp = ITOC(target_inode); + cnp = ITOC(target_inode); error = venus_pioctl(inode->i_sb, &(cnp->c_fid), cmd, &data); @@ -96,5 +95,5 @@ static long coda_pioctl(struct file *filp, unsigned int cmd, out: unlock_kernel(); - return error; + return error; } -- cgit v1.2.3 From 7ea8085910ef3dd4f3cad6845aaa2b580d39b115 Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Wed, 26 May 2010 17:53:25 +0200 Subject: drop unused dentry argument to ->fsync Signed-off-by: Christoph Hellwig Signed-off-by: Al Viro --- fs/coda/coda_int.h | 3 +-- fs/coda/file.c | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) (limited to 'fs/coda') diff --git a/fs/coda/coda_int.h b/fs/coda/coda_int.h index d99860a33890..6b443ff43a19 100644 --- a/fs/coda/coda_int.h +++ b/fs/coda/coda_int.h @@ -11,8 +11,7 @@ extern int coda_fake_statfs; void coda_destroy_inodecache(void); int coda_init_inodecache(void); -int coda_fsync(struct file *coda_file, struct dentry *coda_dentry, - int datasync); +int coda_fsync(struct file *coda_file, int datasync); void coda_sysctl_init(void); void coda_sysctl_clean(void); diff --git a/fs/coda/file.c b/fs/coda/file.c index 7196077b1688..ad3cd2abeeb4 100644 --- a/fs/coda/file.c +++ b/fs/coda/file.c @@ -202,10 +202,10 @@ int coda_release(struct inode *coda_inode, struct file *coda_file) return 0; } -int coda_fsync(struct file *coda_file, struct dentry *coda_dentry, int datasync) +int coda_fsync(struct file *coda_file, int datasync) { struct file *host_file; - struct inode *coda_inode = coda_dentry->d_inode; + struct inode *coda_inode = coda_file->f_path.dentry->d_inode; struct coda_file_info *cfi; int err = 0; -- cgit v1.2.3