diff options
Diffstat (limited to 'fs/select.c')
| -rw-r--r-- | fs/select.c | 40 | 
1 files changed, 18 insertions, 22 deletions
| diff --git a/fs/select.c b/fs/select.c index de668aa9a098..6fb8943d580b 100644 --- a/fs/select.c +++ b/fs/select.c @@ -223,7 +223,7 @@ static void __pollwait(struct file *filp, wait_queue_head_t *wait_address,  	get_file(filp);  	entry->filp = filp;  	entry->wait_address = wait_address; -	entry->key = p->key; +	entry->key = p->_key;  	init_waitqueue_func_entry(&entry->wait, pollwake);  	entry->wait.private = pwq;  	add_wait_queue(wait_address, &entry->wait); @@ -386,13 +386,11 @@ get_max:  static inline void wait_key_set(poll_table *wait, unsigned long in,  				unsigned long out, unsigned long bit)  { -	if (wait) { -		wait->key = POLLEX_SET; -		if (in & bit) -			wait->key |= POLLIN_SET; -		if (out & bit) -			wait->key |= POLLOUT_SET; -	} +	wait->_key = POLLEX_SET; +	if (in & bit) +		wait->_key |= POLLIN_SET; +	if (out & bit) +		wait->_key |= POLLOUT_SET;  }  int do_select(int n, fd_set_bits *fds, struct timespec *end_time) @@ -414,7 +412,7 @@ int do_select(int n, fd_set_bits *fds, struct timespec *end_time)  	poll_initwait(&table);  	wait = &table.pt;  	if (end_time && !end_time->tv_sec && !end_time->tv_nsec) { -		wait = NULL; +		wait->_qproc = NULL;  		timed_out = 1;  	} @@ -459,17 +457,17 @@ int do_select(int n, fd_set_bits *fds, struct timespec *end_time)  					if ((mask & POLLIN_SET) && (in & bit)) {  						res_in |= bit;  						retval++; -						wait = NULL; +						wait->_qproc = NULL;  					}  					if ((mask & POLLOUT_SET) && (out & bit)) {  						res_out |= bit;  						retval++; -						wait = NULL; +						wait->_qproc = NULL;  					}  					if ((mask & POLLEX_SET) && (ex & bit)) {  						res_ex |= bit;  						retval++; -						wait = NULL; +						wait->_qproc = NULL;  					}  				}  			} @@ -481,7 +479,7 @@ int do_select(int n, fd_set_bits *fds, struct timespec *end_time)  				*rexp = res_ex;  			cond_resched();  		} -		wait = NULL; +		wait->_qproc = NULL;  		if (retval || timed_out || signal_pending(current))  			break;  		if (table.error) { @@ -720,7 +718,7 @@ struct poll_list {   * interested in events matching the pollfd->events mask, and the result   * matching that mask is both recorded in pollfd->revents and returned. The   * pwait poll_table will be used by the fd-provided poll handler for waiting, - * if non-NULL. + * if pwait->_qproc is non-NULL.   */  static inline unsigned int do_pollfd(struct pollfd *pollfd, poll_table *pwait)  { @@ -738,9 +736,7 @@ static inline unsigned int do_pollfd(struct pollfd *pollfd, poll_table *pwait)  		if (file != NULL) {  			mask = DEFAULT_POLLMASK;  			if (file->f_op && file->f_op->poll) { -				if (pwait) -					pwait->key = pollfd->events | -							POLLERR | POLLHUP; +				pwait->_key = pollfd->events|POLLERR|POLLHUP;  				mask = file->f_op->poll(file, pwait);  			}  			/* Mask out unneeded events. */ @@ -763,7 +759,7 @@ static int do_poll(unsigned int nfds,  struct poll_list *list,  	/* Optimise the no-wait case */  	if (end_time && !end_time->tv_sec && !end_time->tv_nsec) { -		pt = NULL; +		pt->_qproc = NULL;  		timed_out = 1;  	} @@ -781,22 +777,22 @@ static int do_poll(unsigned int nfds,  struct poll_list *list,  			for (; pfd != pfd_end; pfd++) {  				/*  				 * Fish for events. If we found one, record it -				 * and kill the poll_table, so we don't +				 * and kill poll_table->_qproc, so we don't  				 * needlessly register any other waiters after  				 * this. They'll get immediately deregistered  				 * when we break out and return.  				 */  				if (do_pollfd(pfd, pt)) {  					count++; -					pt = NULL; +					pt->_qproc = NULL;  				}  			}  		}  		/*  		 * All waiters have already been registered, so don't provide -		 * a poll_table to them on the next loop iteration. +		 * a poll_table->_qproc to them on the next loop iteration.  		 */ -		pt = NULL; +		pt->_qproc = NULL;  		if (!count) {  			count = wait->error;  			if (signal_pending(current)) | 
