brintos

brintos / linux-shallow public Read only

0
0
Text · 825 B · c4b3d8d Raw
46 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef _BCACHEFS_SEQMUTEX_H3#define _BCACHEFS_SEQMUTEX_H4 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	lock->seq++;23}24 25static inline u32 seqmutex_unlock(struct seqmutex *lock)26{27	u32 seq = lock->seq;28	mutex_unlock(&lock->lock);29	return seq;30}31 32static inline bool seqmutex_relock(struct seqmutex *lock, u32 seq)33{34	if (lock->seq != seq || !mutex_trylock(&lock->lock))35		return false;36 37	if (lock->seq != seq) {38		mutex_unlock(&lock->lock);39		return false;40	}41 42	return true;43}44 45#endif /* _BCACHEFS_SEQMUTEX_H */46