Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v6.7 48 lines 869 B view raw
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 */