summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2021-09-21 20:49:08 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2021-09-21 20:49:08 -0400
commit08802949e2601a1334cd1b600a1c3bec10f5cdb3 (patch)
tree4c9bba04702ada4afa31350cddf8611eba5a9ea3
parent2b8c1bb0910534e8687ea3e5abf6d8bbba758247 (diff)
Update bcachefs sources to bd6ed9fb42 fixup! bcachefs: Fix initialization of bch_write_op.nonce
-rw-r--r--.bcachefs_revision2
-rw-r--r--libbcachefs/btree_cache.c7
-rw-r--r--libbcachefs/btree_update_leaf.c3
-rw-r--r--libbcachefs/move.c2
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;
}