76 lines
2.3 KiB
Diff
76 lines
2.3 KiB
Diff
From 5e415199384c50c686f34275a94dd0f831ed480d Mon Sep 17 00:00:00 2001
|
|
From: Kent Overstreet <kent.overstreet@linux.dev>
|
|
Date: Fri, 29 Nov 2024 19:13:54 -0500
|
|
Subject: [PATCH 152/233] bcachefs: list_pop_entry()
|
|
Content-Type: text/plain; charset="utf-8"
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
|
|
Signed-off-by: Alexander Miroshnichenko <alex@millerson.name>
|
|
---
|
|
fs/bcachefs/ec.c | 6 ++----
|
|
fs/bcachefs/io_write.c | 4 +---
|
|
fs/bcachefs/util.h | 13 +++++++++++++
|
|
3 files changed, 16 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/fs/bcachefs/ec.c b/fs/bcachefs/ec.c
|
|
index 7d6c33f04092..250e73897d95 100644
|
|
--- a/fs/bcachefs/ec.c
|
|
+++ b/fs/bcachefs/ec.c
|
|
@@ -2465,11 +2465,9 @@ void bch2_fs_ec_exit(struct bch_fs *c)
|
|
|
|
while (1) {
|
|
mutex_lock(&c->ec_stripe_head_lock);
|
|
- h = list_first_entry_or_null(&c->ec_stripe_head_list,
|
|
- struct ec_stripe_head, list);
|
|
- if (h)
|
|
- list_del(&h->list);
|
|
+ h = list_pop_entry(&c->ec_stripe_head_list, struct ec_stripe_head, list);
|
|
mutex_unlock(&c->ec_stripe_head_lock);
|
|
+
|
|
if (!h)
|
|
break;
|
|
|
|
diff --git a/fs/bcachefs/io_write.c b/fs/bcachefs/io_write.c
|
|
index bae045e76055..3e71860f66b9 100644
|
|
--- a/fs/bcachefs/io_write.c
|
|
+++ b/fs/bcachefs/io_write.c
|
|
@@ -637,9 +637,7 @@ void bch2_write_point_do_index_updates(struct work_struct *work)
|
|
|
|
while (1) {
|
|
spin_lock_irq(&wp->writes_lock);
|
|
- op = list_first_entry_or_null(&wp->writes, struct bch_write_op, wp_list);
|
|
- if (op)
|
|
- list_del(&op->wp_list);
|
|
+ op = list_pop_entry(&wp->writes, struct bch_write_op, wp_list);
|
|
wp_update_state(wp, op != NULL);
|
|
spin_unlock_irq(&wp->writes_lock);
|
|
|
|
diff --git a/fs/bcachefs/util.h b/fs/bcachefs/util.h
|
|
index fb02c1c36004..5e4820c8fa44 100644
|
|
--- a/fs/bcachefs/util.h
|
|
+++ b/fs/bcachefs/util.h
|
|
@@ -317,6 +317,19 @@ do { \
|
|
_ptr ? container_of(_ptr, type, member) : NULL; \
|
|
})
|
|
|
|
+static inline struct list_head *list_pop(struct list_head *head)
|
|
+{
|
|
+ if (list_empty(head))
|
|
+ return NULL;
|
|
+
|
|
+ struct list_head *ret = head->next;
|
|
+ list_del_init(ret);
|
|
+ return ret;
|
|
+}
|
|
+
|
|
+#define list_pop_entry(head, type, member) \
|
|
+ container_of_or_null(list_pop(head), type, member)
|
|
+
|
|
/* Does linear interpolation between powers of two */
|
|
static inline unsigned fract_exp_two(unsigned x, unsigned fract_bits)
|
|
{
|
|
--
|
|
2.45.2
|
|
|