Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.10.11.
 1/* SPDX-License-Identifier: GPL-2.0 */
 2#ifndef _BCACHEFS_SEQMUTEX_H
 3#define _BCACHEFS_SEQMUTEX_H
 4
 5#include <linux/mutex.h>
 6
 7struct seqmutex {
 8	struct mutex	lock;
 9	u32		seq;
10};
11
12#define seqmutex_init(_lock)	mutex_init(&(_lock)->lock)
13
14static inline bool seqmutex_trylock(struct seqmutex *lock)
15{
16	return mutex_trylock(&lock->lock);
17}
18
19static inline void seqmutex_lock(struct seqmutex *lock)
20{
21	mutex_lock(&lock->lock);
22}
23
24static inline void seqmutex_unlock(struct seqmutex *lock)
25{
26	lock->seq++;
27	mutex_unlock(&lock->lock);
28}
29
30static inline u32 seqmutex_seq(struct seqmutex *lock)
31{
32	return lock->seq;
33}
34
35static inline bool seqmutex_relock(struct seqmutex *lock, u32 seq)
36{
37	if (lock->seq != seq || !mutex_trylock(&lock->lock))
38		return false;
39
40	if (lock->seq != seq) {
41		mutex_unlock(&lock->lock);
42		return false;
43	}
44
45	return true;
46}
47
48#endif /* _BCACHEFS_SEQMUTEX_H */