diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2021-09-21 20:49:08 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@gmail.com> | 2021-09-21 20:49:08 -0400 |
commit | 08802949e2601a1334cd1b600a1c3bec10f5cdb3 (patch) | |
tree | 4c9bba04702ada4afa31350cddf8611eba5a9ea3 | |
parent | 2b8c1bb0910534e8687ea3e5abf6d8bbba758247 (diff) |
Update bcachefs sources to bd6ed9fb42 fixup! bcachefs: Fix initialization of bch_write_op.nonce
-rw-r--r-- | .bcachefs_revision | 2 | ||||
-rw-r--r-- | libbcachefs/btree_cache.c | 7 | ||||
-rw-r--r-- | libbcachefs/btree_update_leaf.c | 3 | ||||
-rw-r--r-- | 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; } |