From: Frederic Weisbecker <fweisbec@gmail.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org,
John Kacur <jkacur@redhat.com>, Ingo Molnar <mingo@elte.hu>,
Jan Blunck <jblunck@suse.de>
Subject: Re: [RFC 4/5] BKL: use no BKL in llseek
Date: Thu, 3 Jun 2010 02:38:27 +0200 [thread overview]
Message-ID: <20100603003826.GD5164@nowhere> (raw)
In-Reply-To: <1275523999-27462-5-git-send-email-arnd@arndb.de>
On Thu, Jun 03, 2010 at 02:13:18AM +0200, Arnd Bergmann wrote:
> We have shown that the BKL in default_llseek and other
> llseek operations never protects against concurrent access
> from another function:
>
> * Most drivers never access f_pos
> * Most drivers that access f_pos have their own
> llseek function
> * Those drivers that use default_llseek and still
> access f_pos from outside do so without taking the BKL.
> * No file system uses default_llseek.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> drivers/pnp/isapnp/proc.c | 6 +++---
> drivers/usb/core/inode.c | 1 -
> drivers/zorro/proc.c | 6 +++---
> fs/read_write.c | 4 ++--
> 4 files changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/pnp/isapnp/proc.c b/drivers/pnp/isapnp/proc.c
> index 3f94eda..cc22c7c 100644
> --- a/drivers/pnp/isapnp/proc.c
> +++ b/drivers/pnp/isapnp/proc.c
> @@ -32,7 +32,7 @@ static loff_t isapnp_proc_bus_lseek(struct file *file, loff_t off, int whence)
> {
> loff_t new = -1;
>
> - lock_kernel();
> + mutex_lock(&file->f_dentry->d_inode->i_mutex);
> switch (whence) {
> case 0:
> new = off;
> @@ -45,10 +45,10 @@ static loff_t isapnp_proc_bus_lseek(struct file *file, loff_t off, int whence)
> break;
> }
> if (new < 0 || new > 256) {
> - unlock_kernel();
> + mutex_unlock(&file->f_dentry->d_inode->i_mutex);
> return -EINVAL;
> }
> - unlock_kernel();
> + mutex_unlock(&file->f_dentry->d_inode->i_mutex);
> return (file->f_pos = new);
> }
>
> diff --git a/drivers/usb/core/inode.c b/drivers/usb/core/inode.c
> index 1a27618..70b1d42 100644
> --- a/drivers/usb/core/inode.c
> +++ b/drivers/usb/core/inode.c
> @@ -39,7 +39,6 @@
> #include <linux/parser.h>
> #include <linux/notifier.h>
> #include <linux/seq_file.h>
> -#include <linux/smp_lock.h>
> #include <linux/usb/hcd.h>
> #include <asm/byteorder.h>
> #include "usb.h"
> diff --git a/drivers/zorro/proc.c b/drivers/zorro/proc.c
> index 3c7046d..8e4c505 100644
> --- a/drivers/zorro/proc.c
> +++ b/drivers/zorro/proc.c
> @@ -23,7 +23,7 @@ proc_bus_zorro_lseek(struct file *file, loff_t off, int whence)
> {
> loff_t new = -1;
>
> - lock_kernel();
> + mutex_lock(&file->f_dentry->d_inode->i_mutex);
> switch (whence) {
> case 0:
> new = off;
> @@ -36,10 +36,10 @@ proc_bus_zorro_lseek(struct file *file, loff_t off, int whence)
> break;
> }
> if (new < 0 || new > sizeof(struct ConfigDev)) {
> - unlock_kernel();
> + mutex_unlock(&file->f_dentry->d_inode->i_mutex);
> return -EINVAL;
> }
> - unlock_kernel();
> + mutex_unlock(&file->f_dentry->d_inode->i_mutex);
> return (file->f_pos = new);
> }
>
> diff --git a/fs/read_write.c b/fs/read_write.c
> index 9c04852..31c0be7 100644
> --- a/fs/read_write.c
> +++ b/fs/read_write.c
> @@ -124,7 +124,7 @@ loff_t default_llseek(struct file *file, loff_t offset, int origin)
> {
> loff_t retval;
>
> - lock_kernel();
> + mutex_lock(&file->f_dentry->d_inode->i_mutex);
> switch (origin) {
> case SEEK_END:
> offset += i_size_read(file->f_path.dentry->d_inode);
> @@ -145,7 +145,7 @@ loff_t default_llseek(struct file *file, loff_t offset, int origin)
> retval = offset;
> }
> out:
> - unlock_kernel();
> + mutex_unlock(&file->f_dentry->d_inode->i_mutex);
> return retval;
> }
> EXPORT_SYMBOL(default_llseek);
This should be simply dropped and we can make use of generic_file_llseek
instead, as the fallback llseek.
next prev parent reply other threads:[~2010-06-03 0:38 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-03 0:13 [RFC 0/5] BKL removal leftovers Arnd Bergmann
2010-06-03 0:13 ` [RFC 1/5] BKL: autoconvert trivial users to private mutex Arnd Bergmann
2010-06-03 0:35 ` Frederic Weisbecker
2010-06-03 16:50 ` Greg KH
2010-06-03 0:13 ` [RFC 2/5] BKL: remove the BKL from kernel init code Arnd Bergmann
2010-06-03 1:07 ` Steven Rostedt
2010-06-03 0:13 ` [RFC 3/5] BKL: do not take BKL in do_coredump Arnd Bergmann
2010-06-03 0:13 ` [RFC 4/5] BKL: use no BKL in llseek Arnd Bergmann
2010-06-03 0:38 ` Frederic Weisbecker [this message]
2010-06-03 7:08 ` Christoph Hellwig
2010-06-03 7:06 ` Christoph Hellwig
2010-06-03 23:47 ` Arnd Bergmann
2010-06-03 7:41 ` Geert Uytterhoeven
2010-06-03 0:13 ` [RFC 5/5] BKL: introduce CONFIG_BKL Arnd Bergmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100603003826.GD5164@nowhere \
--to=fweisbec@gmail.com \
--cc=arnd@arndb.de \
--cc=jblunck@suse.de \
--cc=jkacur@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mingo@elte.hu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.