diff options
Diffstat (limited to 'include/linux/iocontext.h')
| -rw-r--r-- | include/linux/iocontext.h | 49 | 
1 files changed, 17 insertions, 32 deletions
| diff --git a/include/linux/iocontext.h b/include/linux/iocontext.h index 0a9dc40b7be8..14f7eaf1b443 100644 --- a/include/linux/iocontext.h +++ b/include/linux/iocontext.h @@ -99,55 +99,40 @@ struct io_cq {  struct io_context {  	atomic_long_t refcount;  	atomic_t active_ref; -	atomic_t nr_tasks; +	unsigned short ioprio; + +#ifdef CONFIG_BLK_ICQ  	/* all the fields below are protected by this lock */  	spinlock_t lock; -	unsigned short ioprio; -  	struct radix_tree_root	icq_tree;  	struct io_cq __rcu	*icq_hint;  	struct hlist_head	icq_list;  	struct work_struct release_work; +#endif /* CONFIG_BLK_ICQ */  }; -/** - * get_io_context_active - get active reference on ioc - * @ioc: ioc of interest - * - * Only iocs with active reference can issue new IOs.  This function - * acquires an active reference on @ioc.  The caller must already have an - * active reference on @ioc. - */ -static inline void get_io_context_active(struct io_context *ioc) -{ -	WARN_ON_ONCE(atomic_long_read(&ioc->refcount) <= 0); -	WARN_ON_ONCE(atomic_read(&ioc->active_ref) <= 0); -	atomic_long_inc(&ioc->refcount); -	atomic_inc(&ioc->active_ref); -} - -static inline void ioc_task_link(struct io_context *ioc) -{ -	get_io_context_active(ioc); - -	WARN_ON_ONCE(atomic_read(&ioc->nr_tasks) <= 0); -	atomic_inc(&ioc->nr_tasks); -} -  struct task_struct;  #ifdef CONFIG_BLOCK  void put_io_context(struct io_context *ioc); -void put_io_context_active(struct io_context *ioc);  void exit_io_context(struct task_struct *task); -struct io_context *get_task_io_context(struct task_struct *task, -				       gfp_t gfp_flags, int node); +int __copy_io(unsigned long clone_flags, struct task_struct *tsk); +static inline int copy_io(unsigned long clone_flags, struct task_struct *tsk) +{ +	if (!current->io_context) +		return 0; +	return __copy_io(clone_flags, tsk); +}  #else  struct io_context;  static inline void put_io_context(struct io_context *ioc) { }  static inline void exit_io_context(struct task_struct *task) { } -#endif +static inline int copy_io(unsigned long clone_flags, struct task_struct *tsk) +{ +	return 0; +} +#endif /* CONFIG_BLOCK */ -#endif +#endif /* IOCONTEXT_H */ |