Linux kernel -stable discussions
 help / color / mirror / Atom feed
* [PATCH] bcachefs: Change btree_insert_node() assertion to error
@ 2025-05-07 18:30 Kent Overstreet
  2025-05-09  1:52 ` Sasha Levin
  0 siblings, 1 reply; 2+ messages in thread
From: Kent Overstreet @ 2025-05-07 18:30 UTC (permalink / raw)
  To: Greg Kroah-Hartman; +Cc: stable, Kent Overstreet

Debug for https://github.com/koverstreet/bcachefs/issues/843

Print useful debug info and go emergency read-only.

(cherry picked from commit 63c3b8f616cc95bb1fcc6101c92485d41c535d7c)

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
---
 fs/bcachefs/btree_update_interior.c | 17 ++++++++++++++++-
 fs/bcachefs/error.c                 |  8 ++++++++
 fs/bcachefs/error.h                 |  2 ++
 3 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c
index e4e7c804625e..e9be8b5571a4 100644
--- a/fs/bcachefs/btree_update_interior.c
+++ b/fs/bcachefs/btree_update_interior.c
@@ -35,6 +35,8 @@ static const char * const bch2_btree_update_modes[] = {
 	NULL
 };
 
+static void bch2_btree_update_to_text(struct printbuf *, struct btree_update *);
+
 static int bch2_btree_insert_node(struct btree_update *, struct btree_trans *,
 				  btree_path_idx_t, struct btree *, struct keylist *);
 static void bch2_btree_update_add_new_node(struct btree_update *, struct btree *);
@@ -1782,11 +1784,24 @@ static int bch2_btree_insert_node(struct btree_update *as, struct btree_trans *t
 	int ret;
 
 	lockdep_assert_held(&c->gc_lock);
-	BUG_ON(!btree_node_intent_locked(path, b->c.level));
 	BUG_ON(!b->c.level);
 	BUG_ON(!as || as->b);
 	bch2_verify_keylist_sorted(keys);
 
+	if (!btree_node_intent_locked(path, b->c.level)) {
+		struct printbuf buf = PRINTBUF;
+		bch2_log_msg_start(c, &buf);
+		prt_printf(&buf, "%s(): node not locked at level %u\n",
+			   __func__, b->c.level);
+		bch2_btree_update_to_text(&buf, as);
+		bch2_btree_path_to_text(&buf, trans, path_idx);
+
+		bch2_print_string_as_lines(KERN_ERR, buf.buf);
+		printbuf_exit(&buf);
+		bch2_fs_emergency_read_only(c);
+		return -EIO;
+	}
+
 	ret = bch2_btree_node_lock_write(trans, path, &b->c);
 	if (ret)
 		return ret;
diff --git a/fs/bcachefs/error.c b/fs/bcachefs/error.c
index 038da6a61f6b..6cbf4819e923 100644
--- a/fs/bcachefs/error.c
+++ b/fs/bcachefs/error.c
@@ -11,6 +11,14 @@
 
 #define FSCK_ERR_RATELIMIT_NR	10
 
+void bch2_log_msg_start(struct bch_fs *c, struct printbuf *out)
+{
+#ifdef BCACHEFS_LOG_PREFIX
+	prt_printf(out, bch2_log_msg(c, ""));
+#endif
+	printbuf_indent_add(out, 2);
+}
+
 bool bch2_inconsistent_error(struct bch_fs *c)
 {
 	set_bit(BCH_FS_error, &c->flags);
diff --git a/fs/bcachefs/error.h b/fs/bcachefs/error.h
index 7acf2a27ca28..5730eb6b2f38 100644
--- a/fs/bcachefs/error.h
+++ b/fs/bcachefs/error.h
@@ -18,6 +18,8 @@ struct work_struct;
 
 /* Error messages: */
 
+void bch2_log_msg_start(struct bch_fs *, struct printbuf *);
+
 /*
  * Inconsistency errors: The on disk data is inconsistent. If these occur during
  * initial recovery, they don't indicate a bug in the running code - we walk all
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] bcachefs: Change btree_insert_node() assertion to error
  2025-05-07 18:30 [PATCH] bcachefs: Change btree_insert_node() assertion to error Kent Overstreet
@ 2025-05-09  1:52 ` Sasha Levin
  0 siblings, 0 replies; 2+ messages in thread
From: Sasha Levin @ 2025-05-09  1:52 UTC (permalink / raw)
  To: stable, kent.overstreet; +Cc: Sasha Levin

[ Sasha's backport helper bot ]

Hi,

Summary of potential issues:
⚠️ Found matching upstream commit but patch is missing proper reference to it

Found matching upstream commit: 63c3b8f616cc95bb1fcc6101c92485d41c535d7c

Note: The patch differs from the upstream commit:
---
1:  63c3b8f616cc9 ! 1:  fa08530b7ad9e bcachefs: Change btree_insert_node() assertion to error
    @@ Commit message
     
         Print useful debug info and go emergency read-only.
     
    +    (cherry picked from commit 63c3b8f616cc95bb1fcc6101c92485d41c535d7c)
    +
         Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
     
      ## fs/bcachefs/btree_update_interior.c ##
    @@ fs/bcachefs/btree_update_interior.c: static int bch2_btree_insert_node(struct bt
      	ret = bch2_btree_node_lock_write(trans, path, &b->c);
      	if (ret)
      		return ret;
    +
    + ## fs/bcachefs/error.c ##
    +@@
    + 
    + #define FSCK_ERR_RATELIMIT_NR	10
    + 
    ++void bch2_log_msg_start(struct bch_fs *c, struct printbuf *out)
    ++{
    ++#ifdef BCACHEFS_LOG_PREFIX
    ++	prt_printf(out, bch2_log_msg(c, ""));
    ++#endif
    ++	printbuf_indent_add(out, 2);
    ++}
    ++
    + bool bch2_inconsistent_error(struct bch_fs *c)
    + {
    + 	set_bit(BCH_FS_error, &c->flags);
    +
    + ## fs/bcachefs/error.h ##
    +@@ fs/bcachefs/error.h: struct work_struct;
    + 
    + /* Error messages: */
    + 
    ++void bch2_log_msg_start(struct bch_fs *, struct printbuf *);
    ++
    + /*
    +  * Inconsistency errors: The on disk data is inconsistent. If these occur during
    +  * initial recovery, they don't indicate a bug in the running code - we walk all
---

Results of testing on various branches:

| Branch                    | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| stable/linux-6.14.y       |  Success    |  Success   |
| stable/linux-6.12.y       |  Success    |  Success   |
| stable/linux-6.6.y        |  Success    |  Success   |
| stable/linux-6.1.y        |  Success    |  Success   |
| stable/linux-5.15.y       |  Success    |  Success   |
| stable/linux-5.10.y       |  Success    |  Success   |
| stable/linux-5.4.y        |  Success    |  Success   |

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-05-09  1:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-07 18:30 [PATCH] bcachefs: Change btree_insert_node() assertion to error Kent Overstreet
2025-05-09  1:52 ` Sasha Levin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox