xref: /openbmc/linux/fs/btrfs/misc.h (revision 602cbe91)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 
3 #ifndef BTRFS_MISC_H
4 #define BTRFS_MISC_H
5 
6 #include <linux/sched.h>
7 #include <linux/wait.h>
8 
9 #define in_range(b, first, len) ((b) >= (first) && (b) < (first) + (len))
10 
11 static inline void cond_wake_up(struct wait_queue_head *wq)
12 {
13 	/*
14 	 * This implies a full smp_mb barrier, see comments for
15 	 * waitqueue_active why.
16 	 */
17 	if (wq_has_sleeper(wq))
18 		wake_up(wq);
19 }
20 
21 static inline void cond_wake_up_nomb(struct wait_queue_head *wq)
22 {
23 	/*
24 	 * Special case for conditional wakeup where the barrier required for
25 	 * waitqueue_active is implied by some of the preceding code. Eg. one
26 	 * of such atomic operations (atomic_dec_and_return, ...), or a
27 	 * unlock/lock sequence, etc.
28 	 */
29 	if (waitqueue_active(wq))
30 		wake_up(wq);
31 }
32 
33 #endif
34