xref: /OK3568_Linux_fs/kernel/fs/btrfs/async-thread.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2007 Oracle.  All rights reserved.
4*4882a593Smuzhiyun  * Copyright (C) 2014 Fujitsu.  All rights reserved.
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef BTRFS_ASYNC_THREAD_H
8*4882a593Smuzhiyun #define BTRFS_ASYNC_THREAD_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <linux/workqueue.h>
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun struct btrfs_fs_info;
13*4882a593Smuzhiyun struct btrfs_workqueue;
14*4882a593Smuzhiyun /* Internal use only */
15*4882a593Smuzhiyun struct __btrfs_workqueue;
16*4882a593Smuzhiyun struct btrfs_work;
17*4882a593Smuzhiyun typedef void (*btrfs_func_t)(struct btrfs_work *arg);
18*4882a593Smuzhiyun typedef void (*btrfs_work_func_t)(struct work_struct *arg);
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun struct btrfs_work {
21*4882a593Smuzhiyun 	btrfs_func_t func;
22*4882a593Smuzhiyun 	btrfs_func_t ordered_func;
23*4882a593Smuzhiyun 	btrfs_func_t ordered_free;
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun 	/* Don't touch things below */
26*4882a593Smuzhiyun 	struct work_struct normal_work;
27*4882a593Smuzhiyun 	struct list_head ordered_list;
28*4882a593Smuzhiyun 	struct __btrfs_workqueue *wq;
29*4882a593Smuzhiyun 	unsigned long flags;
30*4882a593Smuzhiyun };
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun struct btrfs_workqueue *btrfs_alloc_workqueue(struct btrfs_fs_info *fs_info,
33*4882a593Smuzhiyun 					      const char *name,
34*4882a593Smuzhiyun 					      unsigned int flags,
35*4882a593Smuzhiyun 					      int limit_active,
36*4882a593Smuzhiyun 					      int thresh);
37*4882a593Smuzhiyun void btrfs_init_work(struct btrfs_work *work, btrfs_func_t func,
38*4882a593Smuzhiyun 		     btrfs_func_t ordered_func, btrfs_func_t ordered_free);
39*4882a593Smuzhiyun void btrfs_queue_work(struct btrfs_workqueue *wq,
40*4882a593Smuzhiyun 		      struct btrfs_work *work);
41*4882a593Smuzhiyun void btrfs_destroy_workqueue(struct btrfs_workqueue *wq);
42*4882a593Smuzhiyun void btrfs_workqueue_set_max(struct btrfs_workqueue *wq, int max);
43*4882a593Smuzhiyun void btrfs_set_work_high_priority(struct btrfs_work *work);
44*4882a593Smuzhiyun struct btrfs_fs_info * __pure btrfs_work_owner(const struct btrfs_work *work);
45*4882a593Smuzhiyun struct btrfs_fs_info * __pure btrfs_workqueue_owner(const struct __btrfs_workqueue *wq);
46*4882a593Smuzhiyun bool btrfs_workqueue_normal_congested(const struct btrfs_workqueue *wq);
47*4882a593Smuzhiyun void btrfs_flush_workqueue(struct btrfs_workqueue *wq);
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun #endif
50