public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
@ 2009-10-18 21:54 John Kacur
  2009-10-19  4:19 ` Arnd Bergmann
  0 siblings, 1 reply; 19+ messages in thread
From: John Kacur @ 2009-10-18 21:54 UTC (permalink / raw)
  To: linux-kernel, Thomas Gleixner
  Cc: Arnd Bergmann, Alan Cox, Ingo Molnar, Frederic Weisbecker

>From b5fefbe4ab8783a0299953b0869cf2af24160875 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Sun, 18 Oct 2009 23:49:49 +0200
Subject: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open

The BKL is in this function because of the BKL pushdown
(see commit f8f2c79d594463427f7114cedb1555110d547d89)

It is not needed here because the mutex_lock sonypi_device.lock
provides the necessary locking.

Signed-off-by: John Kacur <jkacur@redhat.com>
---
 drivers/char/sonypi.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/drivers/char/sonypi.c b/drivers/char/sonypi.c
index 8c262aa..f64600b 100644
--- a/drivers/char/sonypi.c
+++ b/drivers/char/sonypi.c
@@ -50,7 +50,6 @@
 #include <linux/err.h>
 #include <linux/kfifo.h>
 #include <linux/platform_device.h>
-#include <linux/smp_lock.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
@@ -902,14 +901,13 @@ static int sonypi_misc_release(struct inode *inode, struct file *file)
 
 static int sonypi_misc_open(struct inode *inode, struct file *file)
 {
-	lock_kernel();
 	mutex_lock(&sonypi_device.lock);
 	/* Flush input queue on first open */
 	if (!sonypi_device.open_count)
 		kfifo_reset(sonypi_device.fifo);
 	sonypi_device.open_count++;
 	mutex_unlock(&sonypi_device.lock);
-	unlock_kernel();
+
 	return 0;
 }
 
-- 
1.6.0.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-18 21:54 [PATCH] sony_pi: Remove the BKL from sonypi_misc_open John Kacur
@ 2009-10-19  4:19 ` Arnd Bergmann
  2009-10-19 18:20   ` John Kacur
  0 siblings, 1 reply; 19+ messages in thread
From: Arnd Bergmann @ 2009-10-19  4:19 UTC (permalink / raw)
  To: John Kacur
  Cc: linux-kernel, Thomas Gleixner, Arnd Bergmann, Alan Cox,
	Ingo Molnar, Frederic Weisbecker

On Sunday 18 October 2009, John Kacur wrote:
> The BKL is in this function because of the BKL pushdown
> (see commit f8f2c79d594463427f7114cedb1555110d547d89)
> 
> It is not needed here because the mutex_lock sonypi_device.lock
> provides the necessary locking.

The driver still uses the BKL in the ioctl function, which can
probably be removed at the same time.

	Arnd <><

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-19  4:19 ` Arnd Bergmann
@ 2009-10-19 18:20   ` John Kacur
  2009-10-19 22:00     ` Arnd Bergmann
  0 siblings, 1 reply; 19+ messages in thread
From: John Kacur @ 2009-10-19 18:20 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: linux-kernel, Thomas Gleixner, Alan Cox, Ingo Molnar,
	Frederic Weisbecker



On Mon, 19 Oct 2009, Arnd Bergmann wrote:

> On Sunday 18 October 2009, John Kacur wrote:
> > The BKL is in this function because of the BKL pushdown
> > (see commit f8f2c79d594463427f7114cedb1555110d547d89)
> > 
> > It is not needed here because the mutex_lock sonypi_device.lock
> > provides the necessary locking.
> 
> The driver still uses the BKL in the ioctl function, which can
> probably be removed at the same time.
> 
> 	Arnd <><
> 

How does this look? (Version 2 of the patch follows)

>From efd07cfcd021b4438d83d383ab81f9b35cb41eb9 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Sun, 18 Oct 2009 23:49:49 +0200
Subject: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open

The BKL is in this function because of the BKL pushdown
(see commit f8f2c79d594463427f7114cedb1555110d547d89)

It is not needed here because the mutex_lock sonypi_device.lock
provides the necessary locking.

sonpi_misc_ioctl can be converted to unlocked ioctls since it relies on
its own locking (the mutex sonypi_device.lock) and not the bkl

Signed-off-by: John Kacur <jkacur@redhat.com>
---
 drivers/char/sonypi.c |   10 ++++------
 1 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/char/sonypi.c b/drivers/char/sonypi.c
index 8c262aa..593cbb5 100644
--- a/drivers/char/sonypi.c
+++ b/drivers/char/sonypi.c
@@ -50,7 +50,6 @@
 #include <linux/err.h>
 #include <linux/kfifo.h>
 #include <linux/platform_device.h>
-#include <linux/smp_lock.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
@@ -902,14 +901,13 @@ static int sonypi_misc_release(struct inode *inode, struct file *file)
 
 static int sonypi_misc_open(struct inode *inode, struct file *file)
 {
-	lock_kernel();
 	mutex_lock(&sonypi_device.lock);
 	/* Flush input queue on first open */
 	if (!sonypi_device.open_count)
 		kfifo_reset(sonypi_device.fifo);
 	sonypi_device.open_count++;
 	mutex_unlock(&sonypi_device.lock);
-	unlock_kernel();
+
 	return 0;
 }
 
@@ -951,10 +949,10 @@ static unsigned int sonypi_misc_poll(struct file *file, poll_table *wait)
 	return 0;
 }
 
-static int sonypi_misc_ioctl(struct inode *ip, struct file *fp,
+static long sonypi_misc_ioctl(struct file *fp,
 			     unsigned int cmd, unsigned long arg)
 {
-	int ret = 0;
+	long ret = 0;
 	void __user *argp = (void __user *)arg;
 	u8 val8;
 	u16 val16;
@@ -1070,7 +1068,7 @@ static const struct file_operations sonypi_misc_fops = {
 	.open		= sonypi_misc_open,
 	.release	= sonypi_misc_release,
 	.fasync		= sonypi_misc_fasync,
-	.ioctl		= sonypi_misc_ioctl,
+	.unlocked_ioctl	= sonypi_misc_ioctl,
 };
 
 static struct miscdevice sonypi_misc_device = {
-- 
1.6.0.6



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-19 18:20   ` John Kacur
@ 2009-10-19 22:00     ` Arnd Bergmann
  2009-10-19 22:08       ` Arnd Bergmann
  2009-10-19 22:30       ` Mattia Dongili
  0 siblings, 2 replies; 19+ messages in thread
From: Arnd Bergmann @ 2009-10-19 22:00 UTC (permalink / raw)
  To: John Kacur
  Cc: Arnd Bergmann, linux-kernel, Thomas Gleixner, Alan Cox,
	Ingo Molnar, Frederic Weisbecker

On Monday 19 October 2009, John Kacur wrote:
> How does this look? (Version 2 of the patch follows)

Looks good now.

> From efd07cfcd021b4438d83d383ab81f9b35cb41eb9 Mon Sep 17 00:00:00 2001
> From: John Kacur <jkacur@redhat.com>
> Date: Sun, 18 Oct 2009 23:49:49 +0200
> Subject: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
> 
> The BKL is in this function because of the BKL pushdown
> (see commit f8f2c79d594463427f7114cedb1555110d547d89)
> 
> It is not needed here because the mutex_lock sonypi_device.lock
> provides the necessary locking.
> 
> sonpi_misc_ioctl can be converted to unlocked ioctls since it relies on
> its own locking (the mutex sonypi_device.lock) and not the bkl
> 
> Signed-off-by: John Kacur <jkacur@redhat.com>

Acked-by: Arnd Bergmann <arnd@arndb.de>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-19 22:00     ` Arnd Bergmann
@ 2009-10-19 22:08       ` Arnd Bergmann
  2009-10-21  0:06         ` John Kacur
  2009-10-21 21:31         ` Frederic Weisbecker
  2009-10-19 22:30       ` Mattia Dongili
  1 sibling, 2 replies; 19+ messages in thread
From: Arnd Bergmann @ 2009-10-19 22:08 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: John Kacur, linux-kernel, Thomas Gleixner, Alan Cox, Ingo Molnar,
	Frederic Weisbecker

On Tuesday 20 October 2009, Arnd Bergmann wrote:
> On Monday 19 October 2009, John Kacur wrote:
> > How does this look? (Version 2 of the patch follows)
> 
> Looks good now.
> 

A bit of background:

Doing only one of the two conversions is a correct patch as well
of course, I just want to make sure you don't have to go through all
the same files again once someone does a blind pushdown into the ioctl
and llseek functions, so once you prove that a specific driver doesn't
need the BKL, please always make sure to remove it from all three places.

I fear that the llseek part will get interesting as well, just because
we call default_llseek instead of no_ll by default currently.
It might be a good idea to add one of .llseek=no_llseek or 
.llseek=generic_file_llseek in any file_operations that you prove
to not require the BKL.

	Arnd <><

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-19 22:00     ` Arnd Bergmann
  2009-10-19 22:08       ` Arnd Bergmann
@ 2009-10-19 22:30       ` Mattia Dongili
  1 sibling, 0 replies; 19+ messages in thread
From: Mattia Dongili @ 2009-10-19 22:30 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: John Kacur, linux-kernel, Thomas Gleixner, Alan Cox, Ingo Molnar,
	Frederic Weisbecker

On Tue, Oct 20, 2009 at 12:00:24AM +0200, Arnd Bergmann wrote:
> On Monday 19 October 2009, John Kacur wrote:
> > How does this look? (Version 2 of the patch follows)
> 
> Looks good now.

Looks alright to me too.

> > From efd07cfcd021b4438d83d383ab81f9b35cb41eb9 Mon Sep 17 00:00:00 2001
> > From: John Kacur <jkacur@redhat.com>
> > Date: Sun, 18 Oct 2009 23:49:49 +0200
> > Subject: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
> > 
> > The BKL is in this function because of the BKL pushdown
> > (see commit f8f2c79d594463427f7114cedb1555110d547d89)
> > 
> > It is not needed here because the mutex_lock sonypi_device.lock
> > provides the necessary locking.
> > 
> > sonpi_misc_ioctl can be converted to unlocked ioctls since it relies on
> > its own locking (the mutex sonypi_device.lock) and not the bkl
> > 
> > Signed-off-by: John Kacur <jkacur@redhat.com>
> 
> Acked-by: Arnd Bergmann <arnd@arndb.de>

Acked-by: Mattia Dongili <malattia@linux.it>
-- 
mattia
:wq!

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-19 22:08       ` Arnd Bergmann
@ 2009-10-21  0:06         ` John Kacur
  2009-10-21  8:29           ` Arnd Bergmann
  2009-10-21 21:31         ` Frederic Weisbecker
  1 sibling, 1 reply; 19+ messages in thread
From: John Kacur @ 2009-10-21  0:06 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: linux-kernel, Thomas Gleixner, Alan Cox, Ingo Molnar,
	Frederic Weisbecker, Mattia Dongili



On Tue, 20 Oct 2009, Arnd Bergmann wrote:

> On Tuesday 20 October 2009, Arnd Bergmann wrote:
> > On Monday 19 October 2009, John Kacur wrote:
> > > How does this look? (Version 2 of the patch follows)
> > 
> > Looks good now.
> > 
> 
> A bit of background:
> 
> Doing only one of the two conversions is a correct patch as well
> of course, I just want to make sure you don't have to go through all
> the same files again once someone does a blind pushdown into the ioctl
> and llseek functions, so once you prove that a specific driver doesn't
> need the BKL, please always make sure to remove it from all three places.
> 
> I fear that the llseek part will get interesting as well, just because
> we call default_llseek instead of no_ll by default currently.
> It might be a good idea to add one of .llseek=no_llseek or 
> .llseek=generic_file_llseek in any file_operations that you prove
> to not require the BKL.
> 

Good point.

@Thomas: I'm sending this as a separate patch, but I can combine it with
the one that removes the bkl in the open and ioctl functions if you 
prefer.

>From 11e6a3b690413c3926e6db1c53a53410b5214c3d Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Wed, 21 Oct 2009 01:51:41 +0200
Subject: [PATCH] sonypi: Use non-BKL version of llseek.

The default version of llseek uses the BKL.
We have removed the use of the BKL in open and the ioctl.
Now lets remove the last use of the BKL by explictly calling the
generic unlocked llseek, under the sonypi_device.lock mutex

Signed-off-by: John Kacur <jkacur@redhat.com>
---
 drivers/char/sonypi.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/drivers/char/sonypi.c b/drivers/char/sonypi.c
index 593cbb5..55b08cd 100644
--- a/drivers/char/sonypi.c
+++ b/drivers/char/sonypi.c
@@ -1061,6 +1061,16 @@ static long sonypi_misc_ioctl(struct file *fp,
 	return ret;
 }
 
+static loff_t sonypi_misc_llseek(struct file *fp, loff_t offset, int origin)
+{
+	loff_t loff;
+	mutex_lock(&sonypi_device.lock);
+	loff = generic_file_llseek_unlocked(fp, offset, origin);
+	mutex_unlock(&sonypi_device.lock);
+
+	return loff;
+}
+
 static const struct file_operations sonypi_misc_fops = {
 	.owner		= THIS_MODULE,
 	.read		= sonypi_misc_read,
@@ -1069,6 +1079,7 @@ static const struct file_operations sonypi_misc_fops = {
 	.release	= sonypi_misc_release,
 	.fasync		= sonypi_misc_fasync,
 	.unlocked_ioctl	= sonypi_misc_ioctl,
+	.llseek		= sonypi_misc_llseek,
 };
 
 static struct miscdevice sonypi_misc_device = {
-- 
1.6.0.6



^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-21  0:06         ` John Kacur
@ 2009-10-21  8:29           ` Arnd Bergmann
  2009-10-21 10:27             ` John Kacur
  2009-10-22  2:52             ` Christoph Hellwig
  0 siblings, 2 replies; 19+ messages in thread
From: Arnd Bergmann @ 2009-10-21  8:29 UTC (permalink / raw)
  To: John Kacur
  Cc: Arnd Bergmann, linux-kernel, Thomas Gleixner, Alan Cox,
	Ingo Molnar, Frederic Weisbecker, Mattia Dongili

On Wednesday 21 October 2009, John Kacur wrote:
> From 11e6a3b690413c3926e6db1c53a53410b5214c3d Mon Sep 17 00:00:00 2001
> From: John Kacur <jkacur@redhat.com>
> Date: Wed, 21 Oct 2009 01:51:41 +0200
> Subject: [PATCH] sonypi: Use non-BKL version of llseek.
> 
> The default version of llseek uses the BKL.
> We have removed the use of the BKL in open and the ioctl.
> Now lets remove the last use of the BKL by explictly calling the
> generic unlocked llseek, under the sonypi_device.lock mutex
> 
> Signed-off-by: John Kacur <jkacur@redhat.com>

Well, for this specific case, the driver does not actually need to seek,
because the read function never looks at the position and there is no
write function. For annotation purposes, IMHO we should have a simple
'.llseek = no_llseek' in there.

In other files, the best solution may be to just point to generic_file_llseek
and make sure we hold the i_mutex when accessing the file->f_pos explicitly.

Interestingly, atomicity of updates to f_pos is currently maintained through
file_pos_write(), which does not hold any lock but assumes that a store to
an loff_t is atomic. It is not atomic in general, so concurrent lseek and
read/write operations seem to have undefined behaviour no matter what kind
of locking we have in the llseek function.

	Arnd <><

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-21  8:29           ` Arnd Bergmann
@ 2009-10-21 10:27             ` John Kacur
  2009-10-21 13:16               ` Arnd Bergmann
  2009-10-22  2:52             ` Christoph Hellwig
  1 sibling, 1 reply; 19+ messages in thread
From: John Kacur @ 2009-10-21 10:27 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: linux-kernel, Thomas Gleixner, Alan Cox, Ingo Molnar,
	Frederic Weisbecker, Mattia Dongili



On Wed, 21 Oct 2009, Arnd Bergmann wrote:

> On Wednesday 21 October 2009, John Kacur wrote:
> > From 11e6a3b690413c3926e6db1c53a53410b5214c3d Mon Sep 17 00:00:00 2001
> > From: John Kacur <jkacur@redhat.com>
> > Date: Wed, 21 Oct 2009 01:51:41 +0200
> > Subject: [PATCH] sonypi: Use non-BKL version of llseek.
> > 
> > The default version of llseek uses the BKL.
> > We have removed the use of the BKL in open and the ioctl.
> > Now lets remove the last use of the BKL by explictly calling the
> > generic unlocked llseek, under the sonypi_device.lock mutex
> > 
> > Signed-off-by: John Kacur <jkacur@redhat.com>
> 
> Well, for this specific case, the driver does not actually need to seek,
> because the read function never looks at the position and there is no
> write function. For annotation purposes, IMHO we should have a simple
> '.llseek = no_llseek' in there.
> 
> In other files, the best solution may be to just point to generic_file_llseek
> and make sure we hold the i_mutex when accessing the file->f_pos explicitly.
> 
> Interestingly, atomicity of updates to f_pos is currently maintained through
> file_pos_write(), which does not hold any lock but assumes that a store to
> an loff_t is atomic. It is not atomic in general, so concurrent lseek and
> read/write operations seem to have undefined behaviour no matter what kind
> of locking we have in the llseek function.

Thanks again Arnd for all the information you provide!

Here is the 3rd and hopefully final version of the patch. It is simple
the version that you acked, plus .llseek		= no_llseek,

>From 96872f13a510db69fbb32f9e956615cd826f8986 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Sun, 18 Oct 2009 23:49:49 +0200
Subject: [PATCH] sony_pi: Remove the BKL from open and ioctl

The BKL is in this function because of the BKL pushdown
(see commit f8f2c79d594463427f7114cedb1555110d547d89)

It is not needed here because the mutex_lock sonypi_device.lock
provides the necessary locking.

sonpi_misc_ioctl can be converted to unlocked ioctls since it relies on
its own locking (the mutex sonypi_device.lock) and not the bkl

Document that llseek is not needed by explictly setting it to no_llseek

Signed-off-by: John Kacur <jkacur@redhat.com>
---
 drivers/char/sonypi.c |   11 +++++------
 1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/char/sonypi.c b/drivers/char/sonypi.c
index 8c262aa..3f68be3 100644
--- a/drivers/char/sonypi.c
+++ b/drivers/char/sonypi.c
@@ -50,7 +50,6 @@
 #include <linux/err.h>
 #include <linux/kfifo.h>
 #include <linux/platform_device.h>
-#include <linux/smp_lock.h>
 
 #include <asm/uaccess.h>
 #include <asm/io.h>
@@ -902,14 +901,13 @@ static int sonypi_misc_release(struct inode *inode, struct file *file)
 
 static int sonypi_misc_open(struct inode *inode, struct file *file)
 {
-	lock_kernel();
 	mutex_lock(&sonypi_device.lock);
 	/* Flush input queue on first open */
 	if (!sonypi_device.open_count)
 		kfifo_reset(sonypi_device.fifo);
 	sonypi_device.open_count++;
 	mutex_unlock(&sonypi_device.lock);
-	unlock_kernel();
+
 	return 0;
 }
 
@@ -951,10 +949,10 @@ static unsigned int sonypi_misc_poll(struct file *file, poll_table *wait)
 	return 0;
 }
 
-static int sonypi_misc_ioctl(struct inode *ip, struct file *fp,
+static long sonypi_misc_ioctl(struct file *fp,
 			     unsigned int cmd, unsigned long arg)
 {
-	int ret = 0;
+	long ret = 0;
 	void __user *argp = (void __user *)arg;
 	u8 val8;
 	u16 val16;
@@ -1070,7 +1068,8 @@ static const struct file_operations sonypi_misc_fops = {
 	.open		= sonypi_misc_open,
 	.release	= sonypi_misc_release,
 	.fasync		= sonypi_misc_fasync,
-	.ioctl		= sonypi_misc_ioctl,
+	.unlocked_ioctl	= sonypi_misc_ioctl,
+	.llseek		= no_llseek,
 };
 
 static struct miscdevice sonypi_misc_device = {
-- 
1.6.0.6


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-21 10:27             ` John Kacur
@ 2009-10-21 13:16               ` Arnd Bergmann
  0 siblings, 0 replies; 19+ messages in thread
From: Arnd Bergmann @ 2009-10-21 13:16 UTC (permalink / raw)
  To: John Kacur
  Cc: Arnd Bergmann, linux-kernel, Thomas Gleixner, Alan Cox,
	Ingo Molnar, Frederic Weisbecker, Mattia Dongili

On Wednesday 21 October 2009, John Kacur wrote:
> From 96872f13a510db69fbb32f9e956615cd826f8986 Mon Sep 17 00:00:00 2001
> From: John Kacur <jkacur@redhat.com>
> Date: Sun, 18 Oct 2009 23:49:49 +0200
> Subject: [PATCH] sony_pi: Remove the BKL from open and ioctl
> 
> The BKL is in this function because of the BKL pushdown
> (see commit f8f2c79d594463427f7114cedb1555110d547d89)
> 
> It is not needed here because the mutex_lock sonypi_device.lock
> provides the necessary locking.
> 
> sonpi_misc_ioctl can be converted to unlocked ioctls since it relies on
> its own locking (the mutex sonypi_device.lock) and not the bkl
> 
> Document that llseek is not needed by explictly setting it to no_llseek
> 
> Signed-off-by: John Kacur <jkacur@redhat.com>

Acked-by: Arnd Bergmann <arnd@arndb.de>

This looks perfect to me now. Just a few hundred more of these,
and we're done with the drivers ;-)

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-19 22:08       ` Arnd Bergmann
  2009-10-21  0:06         ` John Kacur
@ 2009-10-21 21:31         ` Frederic Weisbecker
  2009-10-21 21:41           ` John Kacur
  2009-10-22  2:55           ` Christoph Hellwig
  1 sibling, 2 replies; 19+ messages in thread
From: Frederic Weisbecker @ 2009-10-21 21:31 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: John Kacur, linux-kernel, Thomas Gleixner, Alan Cox, Ingo Molnar

On Tue, Oct 20, 2009 at 12:08:57AM +0200, Arnd Bergmann wrote:
> On Tuesday 20 October 2009, Arnd Bergmann wrote:
> > On Monday 19 October 2009, John Kacur wrote:
> > > How does this look? (Version 2 of the patch follows)
> > 
> > Looks good now.
> > 
> 
> A bit of background:
> 
> Doing only one of the two conversions is a correct patch as well
> of course, I just want to make sure you don't have to go through all
> the same files again once someone does a blind pushdown into the ioctl
> and llseek functions, so once you prove that a specific driver doesn't
> need the BKL, please always make sure to remove it from all three places.
> 
> I fear that the llseek part will get interesting as well, just because
> we call default_llseek instead of no_ll by default currently.
> It might be a good idea to add one of .llseek=no_llseek or 
> .llseek=generic_file_llseek in any file_operations that you prove
> to not require the BKL.
> 
> 	Arnd <><


What about a pusdown of default_lseek attribution for these
fops that don't have any llseek() (and rename it to
deprecated_default_lseek() )

Because we can probably fix these fops one by one but what
about the next drivers that will have no llseek() ?

We can't attribute default_llseek() by default anymore for
further fops that are to come.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-21 21:31         ` Frederic Weisbecker
@ 2009-10-21 21:41           ` John Kacur
  2009-10-21 21:55             ` Frederic Weisbecker
  2009-10-22  2:55           ` Christoph Hellwig
  1 sibling, 1 reply; 19+ messages in thread
From: John Kacur @ 2009-10-21 21:41 UTC (permalink / raw)
  To: Frederic Weisbecker
  Cc: Arnd Bergmann, linux-kernel, Thomas Gleixner, Alan Cox,
	Ingo Molnar



On Wed, 21 Oct 2009, Frederic Weisbecker wrote:

> On Tue, Oct 20, 2009 at 12:08:57AM +0200, Arnd Bergmann wrote:
> > On Tuesday 20 October 2009, Arnd Bergmann wrote:
> > > On Monday 19 October 2009, John Kacur wrote:
> > > > How does this look? (Version 2 of the patch follows)
> > > 
> > > Looks good now.
> > > 
> > 
> > A bit of background:
> > 
> > Doing only one of the two conversions is a correct patch as well
> > of course, I just want to make sure you don't have to go through all
> > the same files again once someone does a blind pushdown into the ioctl
> > and llseek functions, so once you prove that a specific driver doesn't
> > need the BKL, please always make sure to remove it from all three places.
> > 
> > I fear that the llseek part will get interesting as well, just because
> > we call default_llseek instead of no_ll by default currently.
> > It might be a good idea to add one of .llseek=no_llseek or 
> > .llseek=generic_file_llseek in any file_operations that you prove
> > to not require the BKL.
> > 
> > 	Arnd <><
> 
> 
> What about a pusdown of default_lseek attribution for these
> fops that don't have any llseek() (and rename it to
> deprecated_default_lseek() )
> 
> Because we can probably fix these fops one by one but what
> about the next drivers that will have no llseek() ?
> 
> We can't attribute default_llseek() by default anymore for
> further fops that are to come.
> 
> 

Frederic, I think it is still useful to explicity set to no_llseek, 
drivers that don't use llseek.

I also have to agree with you, that we should no longer be using a 
default_llseek that relies on the BKL.

That is a rather large effort though. All drivers that don't specify an 
llseek function, need to either set it to no_llseek, or as you are 
proposing a deprecated default_llseek that uses the bkl.

thinking of how to start this.

John

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-21 21:41           ` John Kacur
@ 2009-10-21 21:55             ` Frederic Weisbecker
  2009-10-21 22:06               ` John Kacur
  0 siblings, 1 reply; 19+ messages in thread
From: Frederic Weisbecker @ 2009-10-21 21:55 UTC (permalink / raw)
  To: John Kacur
  Cc: Arnd Bergmann, linux-kernel, Thomas Gleixner, Alan Cox,
	Ingo Molnar

On Wed, Oct 21, 2009 at 11:41:07PM +0200, John Kacur wrote:
> > What about a pusdown of default_lseek attribution for these
> > fops that don't have any llseek() (and rename it to
> > deprecated_default_lseek() )
> > 
> > Because we can probably fix these fops one by one but what
> > about the next drivers that will have no llseek() ?
> > 
> > We can't attribute default_llseek() by default anymore for
> > further fops that are to come.
> > 
> > 
> 
> Frederic, I think it is still useful to explicity set to no_llseek, 
> drivers that don't use llseek.


Yeah, I agreed.


 
> I also have to agree with you, that we should no longer be using a 
> default_llseek that relies on the BKL.
> 
> That is a rather large effort though. All drivers that don't specify an 
> llseek function, need to either set it to no_llseek, or as you are 
> proposing a deprecated default_llseek that uses the bkl.
> 
> thinking of how to start this.
> 
> John


This is a rather large effort indeed but this pushdown seems
the only way to remove default_llseek as the default llseek()
callback.

The more we wait, the more code we'll need to review and fix.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-21 21:55             ` Frederic Weisbecker
@ 2009-10-21 22:06               ` John Kacur
  2009-10-21 22:27                 ` Frederic Weisbecker
  0 siblings, 1 reply; 19+ messages in thread
From: John Kacur @ 2009-10-21 22:06 UTC (permalink / raw)
  To: Frederic Weisbecker
  Cc: Arnd Bergmann, linux-kernel, Thomas Gleixner, Alan Cox,
	Ingo Molnar



On Wed, 21 Oct 2009, Frederic Weisbecker wrote:

> On Wed, Oct 21, 2009 at 11:41:07PM +0200, John Kacur wrote:
> > > What about a pusdown of default_lseek attribution for these
> > > fops that don't have any llseek() (and rename it to
> > > deprecated_default_lseek() )
> > > 
> > > Because we can probably fix these fops one by one but what
> > > about the next drivers that will have no llseek() ?
> > > 
> > > We can't attribute default_llseek() by default anymore for
> > > further fops that are to come.
> > > 
> > > 
> > 
> > Frederic, I think it is still useful to explicity set to no_llseek, 
> > drivers that don't use llseek.
> 
> 
> Yeah, I agreed.
> 
> 
>  
> > I also have to agree with you, that we should no longer be using a 
> > default_llseek that relies on the BKL.
> > 
> > That is a rather large effort though. All drivers that don't specify an 
> > llseek function, need to either set it to no_llseek, or as you are 
> > proposing a deprecated default_llseek that uses the bkl.
> > 
> > thinking of how to start this.
> > 
> > John
> 
> 
> This is a rather large effort indeed but this pushdown seems
> the only way to remove default_llseek as the default llseek()
> callback.
> 
> The more we wait, the more code we'll need to review and fix.
> 

Okay, I'm sure there is something wrong in this methodology, but it's late 
at night. At least for a ballpark figure, hopefully it's right.

Files that mentions "file_operations" - 
Files that mention "file_operations" and mention "llseek"
= 1172 - 596 = 572 (in my particular git repo)

So, over 550 files that need to be set to no_llseek, locked_llseek, or 
unlocked_llseek. Yikes!

[jkacur@tycho rt.linux.git]$ git-grep -l file_operations | grep -v 
Documentation | wc -l
1172
[jkacur@tycho rt.linux.git]$ git-grep -l llseek $(git-grep -l 
file_operations | grep -v Documentation) | wc -l
596


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-21 22:06               ` John Kacur
@ 2009-10-21 22:27                 ` Frederic Weisbecker
  0 siblings, 0 replies; 19+ messages in thread
From: Frederic Weisbecker @ 2009-10-21 22:27 UTC (permalink / raw)
  To: John Kacur
  Cc: Arnd Bergmann, linux-kernel, Thomas Gleixner, Alan Cox,
	Ingo Molnar

On Thu, Oct 22, 2009 at 12:06:32AM +0200, John Kacur wrote:
> Okay, I'm sure there is something wrong in this methodology, but it's late 
> at night. At least for a ballpark figure, hopefully it's right.
> 
> Files that mentions "file_operations" - 
> Files that mention "file_operations" and mention "llseek"
> = 1172 - 596 = 572 (in my particular git repo)
> 
> So, over 550 files that need to be set to no_llseek, locked_llseek, or 
> unlocked_llseek. Yikes!
> 
> [jkacur@tycho rt.linux.git]$ git-grep -l file_operations | grep -v 
> Documentation | wc -l
> 1172
> [jkacur@tycho rt.linux.git]$ git-grep -l llseek $(git-grep -l 
> file_operations | grep -v Documentation) | wc -l
> 596
> 


So much?

Ok, a default_lseek pushdown patch wouldn't be accepted :)

Well, I guess we first need to fix the sites that explicitly use the
bkl, one by one, and after that probably propose a new locked version but
without the bkl...


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-21  8:29           ` Arnd Bergmann
  2009-10-21 10:27             ` John Kacur
@ 2009-10-22  2:52             ` Christoph Hellwig
  1 sibling, 0 replies; 19+ messages in thread
From: Christoph Hellwig @ 2009-10-22  2:52 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: John Kacur, linux-kernel, Thomas Gleixner, Alan Cox, Ingo Molnar,
	Frederic Weisbecker, Mattia Dongili

On Wed, Oct 21, 2009 at 10:29:21AM +0200, Arnd Bergmann wrote:
> Well, for this specific case, the driver does not actually need to seek,
> because the read function never looks at the position and there is no
> write function. For annotation purposes, IMHO we should have a simple
> '.llseek = no_llseek' in there.

Which is normal for character drivers.  Even better you should use
nonseekable_open to also prevent pread/pwrite.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-21 21:31         ` Frederic Weisbecker
  2009-10-21 21:41           ` John Kacur
@ 2009-10-22  2:55           ` Christoph Hellwig
  2009-10-22 13:50             ` Arnd Bergmann
  1 sibling, 1 reply; 19+ messages in thread
From: Christoph Hellwig @ 2009-10-22  2:55 UTC (permalink / raw)
  To: Frederic Weisbecker
  Cc: Arnd Bergmann, John Kacur, linux-kernel, Thomas Gleixner,
	Alan Cox, Ingo Molnar

On Wed, Oct 21, 2009 at 11:31:42PM +0200, Frederic Weisbecker wrote:
> What about a pusdown of default_lseek attribution for these
> fops that don't have any llseek() (and rename it to
> deprecated_default_lseek() )
> 
> Because we can probably fix these fops one by one but what
> about the next drivers that will have no llseek() ?
> 
> We can't attribute default_llseek() by default anymore for
> further fops that are to come.

The right (although quite complicated) thing is to return -ESPIPE from
vfs_llseek if no ->llseek method is present, or even better also
disallowing pread/pwrite by default.  It'll need a quite substantial
audit and is best done by different types of inodes - S_IFIFO is easy,
SIFDIR at least has very few instances, S_IFREG usually wants a real
llseek (generic_file_llseek in most cases) and directories also need
a llseek method that takes i_mutex so it protects against namespace
operations.


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-22  2:55           ` Christoph Hellwig
@ 2009-10-22 13:50             ` Arnd Bergmann
  2009-10-25  7:30               ` Christoph Hellwig
  0 siblings, 1 reply; 19+ messages in thread
From: Arnd Bergmann @ 2009-10-22 13:50 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Frederic Weisbecker, Arnd Bergmann, John Kacur, linux-kernel,
	Thomas Gleixner, Alan Cox, Ingo Molnar

On Thursday 22 October 2009, Christoph Hellwig wrote:

> The right (although quite complicated) thing is to return -ESPIPE from
> vfs_llseek if no ->llseek method is present, or even better also
> disallowing pread/pwrite by default.  It'll need a quite substantial
> audit and is best done by different types of inodes - S_IFIFO is easy,
> SIFDIR at least has very few instances, S_IFREG usually wants a real
> llseek (generic_file_llseek in most cases) and directories also need
> a llseek method that takes i_mutex so it protects against namespace
> operations.

Is it safe to assume that file_operations without a read() or write()
method also don't need llseek?

There are over 200 instances of file_operations that have a no read,
write or lseek operations and we can easily detect that in vfs_llseek,
calling no_llseek by default.

Testing for S_IFREG will not work well for debugfs, which is probably
a large number of the cases that do not want an llseek method.

	Arnd <><

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH] sony_pi: Remove the BKL from sonypi_misc_open
  2009-10-22 13:50             ` Arnd Bergmann
@ 2009-10-25  7:30               ` Christoph Hellwig
  0 siblings, 0 replies; 19+ messages in thread
From: Christoph Hellwig @ 2009-10-25  7:30 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Christoph Hellwig, Frederic Weisbecker, John Kacur, linux-kernel,
	Thomas Gleixner, Alan Cox, Ingo Molnar

On Thu, Oct 22, 2009 at 03:50:04PM +0200, Arnd Bergmann wrote:
> Is it safe to assume that file_operations without a read() or write()
> method also don't need llseek?

There are two reasons why a driver could need llseek:

 (a) it uses the file position somewhere.  Normally that's just in
     read/write, but I wouldn't be surprised if there are drivers using
     the file position somewhere in weird ioctls.
 (b) because broken userland assumes they can seek on the file
     descriptor.  For example some versions of tar expect lseek to work
     on tape devices despite them not actually using the file position
     anywere.

So the answer to your above questions is: most likely yes, but and audit
for a) should be performed.  We can't do much about (b) except for trial
and error.  Unless there are very important applications expecting to be
able to seek I think returning the correct error is more important than
having zero change in behaviour.

> Testing for S_IFREG will not work well for debugfs, which is probably
> a large number of the cases that do not want an llseek method.

Yes.  S_IFREG should be done last, and probably the real filesystem
should be converted to always have a llseek method before tackling the
mess in the synthetic filesystems.


^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2009-10-25  7:30 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-18 21:54 [PATCH] sony_pi: Remove the BKL from sonypi_misc_open John Kacur
2009-10-19  4:19 ` Arnd Bergmann
2009-10-19 18:20   ` John Kacur
2009-10-19 22:00     ` Arnd Bergmann
2009-10-19 22:08       ` Arnd Bergmann
2009-10-21  0:06         ` John Kacur
2009-10-21  8:29           ` Arnd Bergmann
2009-10-21 10:27             ` John Kacur
2009-10-21 13:16               ` Arnd Bergmann
2009-10-22  2:52             ` Christoph Hellwig
2009-10-21 21:31         ` Frederic Weisbecker
2009-10-21 21:41           ` John Kacur
2009-10-21 21:55             ` Frederic Weisbecker
2009-10-21 22:06               ` John Kacur
2009-10-21 22:27                 ` Frederic Weisbecker
2009-10-22  2:55           ` Christoph Hellwig
2009-10-22 13:50             ` Arnd Bergmann
2009-10-25  7:30               ` Christoph Hellwig
2009-10-19 22:30       ` Mattia Dongili

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox