Fix select on /proc files without ->poll
Taneli Vähäkangas <vahakang@cs.helsinki.fi> reported that commit
786d7e1612
aka "Fix rmmod/read/write races
in /proc entries" broke SBCL + SLIME combo.
The old code in do_select() used DEFAULT_POLLMASK, if couldn't find
->poll handler. The new code makes ->poll always there and returns 0 by
default, which is not correct. Return DEFAULT_POLLMASK instead.
Steps to reproduce:
install emacs, SBCL, SLIME
emacs
M-x slime in *inferior-lisp* buffer
[watch it doing "Connecting to Swank on port X.."]
Please, apply before 2.6.23.
P.S.: why SBCL can't just read(2) /proc/cpuinfo is a mystery.
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Cc: T Taneli Vahakangas <vahakang@cs.helsinki.fi>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3210f0ecdb
commit
dd23aae4f5
3 changed files with 4 additions and 3 deletions
|
@ -11,6 +11,7 @@
|
|||
#include <linux/string.h>
|
||||
#include <linux/stat.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/file.h>
|
||||
#include <linux/limits.h>
|
||||
#include <linux/init.h>
|
||||
|
@ -232,7 +233,7 @@ static ssize_t proc_reg_write(struct file *file, const char __user *buf, size_t
|
|||
static unsigned int proc_reg_poll(struct file *file, struct poll_table_struct *pts)
|
||||
{
|
||||
struct proc_dir_entry *pde = PDE(file->f_path.dentry->d_inode);
|
||||
unsigned int rv = 0;
|
||||
unsigned int rv = DEFAULT_POLLMASK;
|
||||
unsigned int (*poll)(struct file *, struct poll_table_struct *);
|
||||
|
||||
spin_lock(&pde->pde_unload_lock);
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
#define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)
|
||||
|
||||
struct poll_table_page {
|
||||
struct poll_table_page * next;
|
||||
struct poll_table_entry * entry;
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
#define WQUEUES_STACK_ALLOC (MAX_STACK_ALLOC - FRONTEND_STACK_ALLOC)
|
||||
#define N_INLINE_POLL_ENTRIES (WQUEUES_STACK_ALLOC / sizeof(struct poll_table_entry))
|
||||
|
||||
#define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)
|
||||
|
||||
struct poll_table_struct;
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue