xref: /linux/fs/bcachefs/rcu_pending.h (revision 3a39d672e7f48b8d6b91a09afa4b55352773b4b5)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_RCU_PENDING_H
3 #define _LINUX_RCU_PENDING_H
4 
5 #include <linux/rcupdate.h>
6 
7 struct rcu_pending;
8 typedef void (*rcu_pending_process_fn)(struct rcu_pending *, struct rcu_head *);
9 
10 struct rcu_pending_pcpu;
11 
12 struct rcu_pending {
13 	struct rcu_pending_pcpu __percpu *p;
14 	struct srcu_struct		*srcu;
15 	rcu_pending_process_fn		process;
16 };
17 
18 void rcu_pending_enqueue(struct rcu_pending *pending, struct rcu_head *obj);
19 struct rcu_head *rcu_pending_dequeue(struct rcu_pending *pending);
20 struct rcu_head *rcu_pending_dequeue_from_all(struct rcu_pending *pending);
21 
22 void rcu_pending_exit(struct rcu_pending *pending);
23 int rcu_pending_init(struct rcu_pending *pending,
24 		     struct srcu_struct *srcu,
25 		     rcu_pending_process_fn process);
26 
27 #endif /* _LINUX_RCU_PENDING_H */
28