VFS: fix select again
Change-Id: Ia5e26cdbfe38e3fb293dd57269a76b15c1fe236b
This commit is contained in:
		
							parent
							
								
									cb87646dac
								
							
						
					
					
						commit
						06e2adbeaa
					
				@ -190,10 +190,14 @@ int notouch		/* check only */
 | 
			
		||||
  int r = OK;
 | 
			
		||||
 | 
			
		||||
  /* Reads start at the beginning; writes append to pipes */
 | 
			
		||||
  if (rw_flag == READING)
 | 
			
		||||
  if (notouch) /* In this case we don't actually care whether data transfer
 | 
			
		||||
		* would succeed. See POSIX 1003.1-2008 */
 | 
			
		||||
	pos = 0;
 | 
			
		||||
  else
 | 
			
		||||
  else if (rw_flag == READING)
 | 
			
		||||
	pos = 0;
 | 
			
		||||
  else {
 | 
			
		||||
	pos = vp->v_size;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /* If reading, check for empty pipe. */
 | 
			
		||||
  if (rw_flag == READING) {
 | 
			
		||||
 | 
			
		||||
@ -7,6 +7,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "fs.h"
 | 
			
		||||
#include <sys/fcntl.h>
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <sys/select.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
@ -452,7 +453,8 @@ static int select_request_pipe(struct filp *f, int *ops, int block)
 | 
			
		||||
 | 
			
		||||
  if ((*ops & (SEL_RD|SEL_ERR))) {
 | 
			
		||||
	/* Check if we can read 1 byte */
 | 
			
		||||
	err = pipe_check(f->filp_vno, READING, f->filp_flags, 1, 1 /* Check only */);
 | 
			
		||||
	err = pipe_check(f->filp_vno, READING, f->filp_flags & ~O_NONBLOCK, 1,
 | 
			
		||||
			 1 /* Check only */);
 | 
			
		||||
 | 
			
		||||
	if (err != SUSPEND)
 | 
			
		||||
		r |= SEL_RD;
 | 
			
		||||
@ -468,7 +470,8 @@ static int select_request_pipe(struct filp *f, int *ops, int block)
 | 
			
		||||
 | 
			
		||||
  if ((*ops & (SEL_WR|SEL_ERR))) {
 | 
			
		||||
	/* Check if we can write 1 byte */
 | 
			
		||||
	err = pipe_check(f->filp_vno, WRITING, f->filp_flags, 1, 1 /* Check only */);
 | 
			
		||||
	err = pipe_check(f->filp_vno, WRITING, f->filp_flags & ~O_NONBLOCK, 1,
 | 
			
		||||
			 1 /* Check only */);
 | 
			
		||||
 | 
			
		||||
	if (err != SUSPEND)
 | 
			
		||||
		r |= SEL_WR;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user