diff options
author | 2024-10-09 00:59:08 +0800 | |
---|---|---|
committer | 2024-10-09 16:42:53 -0400 | |
commit | a1541541480073365ac701a1125d750a86bfd644 (patch) | |
tree | a46c58a3e2a57aec0a29c92ea7637bc0623609b3 | |
parent | bcachefs: add check for btree id against max in try read node (diff) | |
download | wireguard-linux-a1541541480073365ac701a1125d750a86bfd644.tar.xz wireguard-linux-a1541541480073365ac701a1125d750a86bfd644.zip |
bcachefs: Release transaction before wake up
We will get this if we wake up first:
Kernel panic - not syncing: btree_node_write_done leaked btree_trans
since there are still transactions waiting for cycle detectors after
BTREE_NODE_write_in_flight is cleared.
Signed-off-by: Alan Huang <mmpgouride@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/btree_io.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/bcachefs/btree_io.c b/fs/bcachefs/btree_io.c index 1c1448b52207..cf933409d385 100644 --- a/fs/bcachefs/btree_io.c +++ b/fs/bcachefs/btree_io.c @@ -1838,10 +1838,11 @@ static void btree_node_write_done(struct bch_fs *c, struct btree *b) struct btree_trans *trans = bch2_trans_get(c); btree_node_lock_nopath_nofail(trans, &b->c, SIX_LOCK_read); - __btree_node_write_done(c, b); - six_unlock_read(&b->c.lock); + /* we don't need transaction context anymore after we got the lock. */ bch2_trans_put(trans); + __btree_node_write_done(c, b); + six_unlock_read(&b->c.lock); } static void btree_node_write_work(struct work_struct *work) |