From 08802949e2601a1334cd1b600a1c3bec10f5cdb3 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 21 Sep 2021 20:49:08 -0400 Subject: [PATCH] Update bcachefs sources to bd6ed9fb42 fixup! bcachefs: Fix initialization of bch_write_op.nonce --- .bcachefs_revision | 2 +- libbcachefs/btree_cache.c | 7 ++++++- libbcachefs/btree_update_leaf.c | 3 +++ libbcachefs/move.c | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.bcachefs_revision b/.bcachefs_revision index e80bf480..d53addfb 100644 --- a/.bcachefs_revision +++ b/.bcachefs_revision @@ -1 +1 @@ -3f3f9698592290e98a727f5023115c1775be7d5f +bd6ed9fb42c0aa36d1f4a21eeab45fe12e1fb792 diff --git a/libbcachefs/btree_cache.c b/libbcachefs/btree_cache.c index 5f9ab818..905237a7 100644 --- a/libbcachefs/btree_cache.c +++ b/libbcachefs/btree_cache.c @@ -770,7 +770,12 @@ struct btree *bch2_btree_node_get(struct btree_trans *trans, struct btree_path * if (c->opts.btree_node_mem_ptr_optimization) { b = btree_node_mem_ptr(k); - if (b) + /* + * Check b->hash_val _before_ calling btree_node_lock() - this + * might not be the node we want anymore, and trying to lock the + * wrong node could cause an unneccessary transaction restart: + */ + if (b && b->hash_val == btree_ptr_hash_val(k)) goto lock_node; } retry: diff --git a/libbcachefs/btree_update_leaf.c b/libbcachefs/btree_update_leaf.c index 9c8c5cac..a0da9673 100644 --- a/libbcachefs/btree_update_leaf.c +++ b/libbcachefs/btree_update_leaf.c @@ -795,6 +795,9 @@ bch2_trans_commit_get_rw_cold(struct btree_trans *trans) if (ret) return ret; + if (!bch2_trans_relock(trans)) + return -EINTR; + percpu_ref_get(&c->writes); return 0; } diff --git a/libbcachefs/move.c b/libbcachefs/move.c index fb7c0abd..7001e3cd 100644 --- a/libbcachefs/move.c +++ b/libbcachefs/move.c @@ -263,7 +263,7 @@ int bch2_migrate_write_init(struct bch_fs *c, struct migrate_write *m, */ bkey_for_each_crc(k.k, ptrs, crc, entry) if (bch2_csum_type_is_encryption(crc.csum_type)) { - m->op.nonce = crc.nonce + m->op.crc.offset; + m->op.nonce = crc.nonce + crc.offset; m->op.csum_type = crc.csum_type; break; }