diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2024-06-28 18:11:46 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2024-06-28 18:26:04 -0400 |
commit | 34b5654d9eb1999704e75d964645e3aa9b78e249 (patch) | |
tree | 27269b040f9128cf33155a9ca47038703efc5606 /include | |
parent | b0eb3c29304f9a4ca39c8534bb6476b170b2a7d0 (diff) |
Update bcachefs sources to 9404a01d3dc5 bcachefs: Make read_only a mount option again, but hiddenv1.9.2
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/atomic.h | 7 | ||||
-rw-r--r-- | include/linux/closure.h | 23 | ||||
-rw-r--r-- | include/linux/workqueue.h | 2 |
3 files changed, 31 insertions, 1 deletions
diff --git a/include/linux/atomic.h b/include/linux/atomic.h index 73024023..dcc6e644 100644 --- a/include/linux/atomic.h +++ b/include/linux/atomic.h @@ -26,6 +26,7 @@ typedef struct { #define __ATOMIC_READ(p) uatomic_read(p) #define __ATOMIC_SET(p, v) uatomic_set(p, v) +#define __ATOMIC_SET_RELEASE(p, v) uatomic_set(p, v) #define __ATOMIC_ADD_RETURN(v, p) uatomic_add_return(p, v) #define __ATOMIC_SUB_RETURN(v, p) uatomic_sub_return(p, v) #define __ATOMIC_ADD(v, p) uatomic_add(p, v) @@ -64,6 +65,7 @@ typedef struct { #define __ATOMIC_READ(p) __atomic_load_n(p, __ATOMIC_RELAXED) #define __ATOMIC_SET(p, v) __atomic_store_n(p, v, __ATOMIC_RELAXED) +#define __ATOMIC_SET_RELEASE(p, v) __atomic_store_n(p, v, __ATOMIC_RELEASE) #define __ATOMIC_ADD_RETURN(v, p) __atomic_add_fetch(p, v, __ATOMIC_RELAXED) #define __ATOMIC_ADD_RETURN_RELEASE(v, p) \ __atomic_add_fetch(p, v, __ATOMIC_RELEASE) @@ -189,6 +191,11 @@ static inline void a_type##_set(a_type##_t *v, i_type i) \ return __ATOMIC_SET(&v->counter, i); \ } \ \ +static inline void a_type##_set_release(a_type##_t *v, i_type i) \ +{ \ + return __ATOMIC_SET_RELEASE(&v->counter, i); \ +} \ + \ static inline i_type a_type##_add_return(i_type i, a_type##_t *v) \ { \ return __ATOMIC_ADD_RETURN(i, &v->counter); \ diff --git a/include/linux/closure.h b/include/linux/closure.h index 99155df1..59b8c06b 100644 --- a/include/linux/closure.h +++ b/include/linux/closure.h @@ -285,6 +285,21 @@ static inline void closure_get(struct closure *cl) } /** + * closure_get_not_zero + */ +static inline bool closure_get_not_zero(struct closure *cl) +{ + unsigned old = atomic_read(&cl->remaining); + do { + if (!(old & CLOSURE_REMAINING_MASK)) + return false; + + } while (!atomic_try_cmpxchg_acquire(&cl->remaining, &old, old + 1)); + + return true; +} + +/** * closure_init - Initialize a closure, setting the refcount to 1 * @cl: closure to initialize * @parent: parent of the new closure. cl will take a refcount on it for its @@ -310,6 +325,12 @@ static inline void closure_init_stack(struct closure *cl) atomic_set(&cl->remaining, CLOSURE_REMAINING_INITIALIZER); } +static inline void closure_init_stack_release(struct closure *cl) +{ + memset(cl, 0, sizeof(struct closure)); + atomic_set_release(&cl->remaining, CLOSURE_REMAINING_INITIALIZER); +} + /** * closure_wake_up - wake up all closures on a wait list, * with memory barrier @@ -355,6 +376,8 @@ do { \ */ #define closure_return(_cl) continue_at((_cl), NULL, NULL) +void closure_return_sync(struct closure *cl); + /** * continue_at_nobarrier - jump to another function without barrier * diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index 1406c958..5d2ca5f8 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h @@ -151,7 +151,7 @@ extern void workqueue_set_max_active(struct workqueue_struct *wq, extern bool current_is_workqueue_rescuer(void); extern bool workqueue_congested(int cpu, struct workqueue_struct *wq); extern unsigned int work_busy(struct work_struct *work); -extern __printf(1, 2) void set_worker_desc(const char *fmt, ...); +static inline __printf(1, 2) void set_worker_desc(const char *fmt, ...) {} extern void print_worker_info(const char *log_lvl, struct task_struct *task); extern void show_workqueue_state(void); |