]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - include/linux/atomic.h
Update bcachefs sources to 99750eab4d bcachefs: Persist stripe blocks_used
[bcachefs-tools-debian] / include / linux / atomic.h
index 7471bd976dc244c75144d54329db3f4107a5cb3a..38a364c07c1b619668f7823fa9d546944022369e 100644 (file)
@@ -37,6 +37,7 @@ typedef struct {
 #define xchg_acquire(p, v)             uatomic_xchg(p, v)
 #define cmpxchg(p, old, new)           uatomic_cmpxchg(p, old, new)
 #define cmpxchg_acquire(p, old, new)   uatomic_cmpxchg(p, old, new)
+#define cmpxchg_release(p, old, new)   uatomic_cmpxchg(p, old, new)
 
 #define smp_mb__before_atomic()                cmm_smp_mb__before_uatomic_add()
 #define smp_mb__after_atomic()         cmm_smp_mb__after_uatomic_add()
@@ -77,6 +78,16 @@ typedef struct {
        __old;                                                  \
 })
 
+#define cmpxchg_release(p, old, new)                           \
+({                                                             \
+       typeof(*(p)) __old = (old);                             \
+                                                               \
+       __atomic_compare_exchange_n((p), &__old, new, false,    \
+                                   __ATOMIC_RELEASE,           \
+                                   __ATOMIC_RELEASE);          \
+       __old;                                                  \
+})
+
 #define smp_mb__before_atomic()        __atomic_thread_fence(__ATOMIC_SEQ_CST)
 #define smp_mb__after_atomic() __atomic_thread_fence(__ATOMIC_SEQ_CST)
 #define smp_wmb()              __atomic_thread_fence(__ATOMIC_SEQ_CST)