[32/74] vt: synchronize_rcu() under spinlock is not nice...

2013-04-07 Thread Ben Hutchings
3.2.43-rc1 review patch.  If anyone has any objections, please let me know.

--

From: Al Viro 

commit e8cd8169315db57d3c9aa7dd90eda4842874 upstream.

vcs_poll_data_free() calls unregister_vt_notifier(), which calls
atomic_notifier_chain_unregister(), which calls synchronize_rcu().
Do it *after* we'd dropped ->f_lock.

Signed-off-by: Al Viro 
Signed-off-by: Ben Hutchings 
---
 drivers/tty/vt/vc_screen.c |6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/vt/vc_screen.c b/drivers/tty/vt/vc_screen.c
index e4ca345..d7799de 100644
--- a/drivers/tty/vt/vc_screen.c
+++ b/drivers/tty/vt/vc_screen.c
@@ -93,7 +93,7 @@ vcs_poll_data_free(struct vcs_poll_data *poll)
 static struct vcs_poll_data *
 vcs_poll_data_get(struct file *file)
 {
-   struct vcs_poll_data *poll = file->private_data;
+   struct vcs_poll_data *poll = file->private_data, *kill = NULL;
 
if (poll)
return poll;
@@ -122,10 +122,12 @@ vcs_poll_data_get(struct file *file)
file->private_data = poll;
} else {
/* someone else raced ahead of us */
-   vcs_poll_data_free(poll);
+   kill = poll;
poll = file->private_data;
}
spin_unlock(>f_lock);
+   if (kill)
+   vcs_poll_data_free(kill);
 
return poll;
 }

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[32/74] vt: synchronize_rcu() under spinlock is not nice...

2013-04-07 Thread Ben Hutchings
3.2.43-rc1 review patch.  If anyone has any objections, please let me know.

--

From: Al Viro v...@zeniv.linux.org.uk

commit e8cd8169315db57d3c9aa7dd90eda4842874 upstream.

vcs_poll_data_free() calls unregister_vt_notifier(), which calls
atomic_notifier_chain_unregister(), which calls synchronize_rcu().
Do it *after* we'd dropped -f_lock.

Signed-off-by: Al Viro v...@zeniv.linux.org.uk
Signed-off-by: Ben Hutchings b...@decadent.org.uk
---
 drivers/tty/vt/vc_screen.c |6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/vt/vc_screen.c b/drivers/tty/vt/vc_screen.c
index e4ca345..d7799de 100644
--- a/drivers/tty/vt/vc_screen.c
+++ b/drivers/tty/vt/vc_screen.c
@@ -93,7 +93,7 @@ vcs_poll_data_free(struct vcs_poll_data *poll)
 static struct vcs_poll_data *
 vcs_poll_data_get(struct file *file)
 {
-   struct vcs_poll_data *poll = file-private_data;
+   struct vcs_poll_data *poll = file-private_data, *kill = NULL;
 
if (poll)
return poll;
@@ -122,10 +122,12 @@ vcs_poll_data_get(struct file *file)
file-private_data = poll;
} else {
/* someone else raced ahead of us */
-   vcs_poll_data_free(poll);
+   kill = poll;
poll = file-private_data;
}
spin_unlock(file-f_lock);
+   if (kill)
+   vcs_poll_data_free(kill);
 
return poll;
 }

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/