diff options
Diffstat (limited to 'fs/file.c')
| -rw-r--r-- | fs/file.c | 19 | 
1 files changed, 8 insertions, 11 deletions
diff --git a/fs/file.c b/fs/file.c index 3b683b9101d8..8076aef9c210 100644 --- a/fs/file.c +++ b/fs/file.c @@ -271,6 +271,11 @@ static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt)  	__clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits);  } +static inline bool fd_is_open(unsigned int fd, const struct fdtable *fdt) +{ +	return test_bit(fd, fdt->open_fds); +} +  static unsigned int count_open_files(struct fdtable *fdt)  {  	unsigned int size = fdt->max_fds; @@ -915,13 +920,8 @@ struct file *get_file_rcu(struct file __rcu **f)  		struct file __rcu *file;  		file = __get_file_rcu(f); -		if (unlikely(!file)) -			return NULL; - -		if (unlikely(IS_ERR(file))) -			continue; - -		return file; +		if (!IS_ERR(file)) +			return file;  	}  }  EXPORT_SYMBOL_GPL(get_file_rcu); @@ -1219,12 +1219,9 @@ void set_close_on_exec(unsigned int fd, int flag)  bool get_close_on_exec(unsigned int fd)  { -	struct files_struct *files = current->files; -	struct fdtable *fdt;  	bool res;  	rcu_read_lock(); -	fdt = files_fdtable(files); -	res = close_on_exec(fd, fdt); +	res = close_on_exec(fd, current->files);  	rcu_read_unlock();  	return res;  }  |