summaryrefslogtreecommitdiff
path: root/libbcachefs/btree_io.h
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/btree_io.h')
-rw-r--r--libbcachefs/btree_io.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/libbcachefs/btree_io.h b/libbcachefs/btree_io.h
index 3014b5f0..d023dfae 100644
--- a/libbcachefs/btree_io.h
+++ b/libbcachefs/btree_io.h
@@ -27,7 +27,8 @@ static inline void btree_node_wait_on_io(struct btree *b)
static inline bool btree_node_may_write(struct btree *b)
{
- return list_empty_careful(&b->write_blocked);
+ return list_empty_careful(&b->write_blocked) &&
+ list_empty_careful(&b->reachable);
}
enum compact_mode {
@@ -80,6 +81,8 @@ void bch2_btree_node_write(struct bch_fs *, struct btree *,
#define bch2_btree_node_write_dirty(_c, _b, _cl, cond) \
do { \
while ((_b)->written && btree_node_dirty(_b) && (cond)) { \
+ set_btree_node_need_write(_b); \
+ \
if (!btree_node_may_write(_b)) \
break; \
\