Commit 41697f38 authored by Kent Overstreet's avatar Kent Overstreet Committed by Kent Overstreet

bcachefs: Fix for the bkey compat path

In the write path, we were calling bch2_bkey_ops.compat() in the wrong
place.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 297604c9
...@@ -283,13 +283,23 @@ void __bch2_bkey_compat(unsigned level, enum btree_id btree_id, ...@@ -283,13 +283,23 @@ void __bch2_bkey_compat(unsigned level, enum btree_id btree_id,
const struct bkey_ops *ops; const struct bkey_ops *ops;
struct bkey uk; struct bkey uk;
struct bkey_s u; struct bkey_s u;
int i;
/*
* Do these operations in reverse order in the write path:
*/
for (i = 0; i < 4; i++)
switch (!write ? i : 3 - i) {
case 0:
if (big_endian != CPU_BIG_ENDIAN) if (big_endian != CPU_BIG_ENDIAN)
bch2_bkey_swab_key(f, k); bch2_bkey_swab_key(f, k);
break;
case 1:
if (version < bcachefs_metadata_version_bkey_renumber) if (version < bcachefs_metadata_version_bkey_renumber)
bch2_bkey_renumber(__btree_node_type(level, btree_id), k, write); bch2_bkey_renumber(__btree_node_type(level, btree_id), k, write);
break;
case 2:
if (version < bcachefs_metadata_version_inode_btree_change && if (version < bcachefs_metadata_version_inode_btree_change &&
btree_id == BTREE_ID_INODES) { btree_id == BTREE_ID_INODES) {
if (!bkey_packed(k)) { if (!bkey_packed(k)) {
...@@ -312,7 +322,8 @@ void __bch2_bkey_compat(unsigned level, enum btree_id btree_id, ...@@ -312,7 +322,8 @@ void __bch2_bkey_compat(unsigned level, enum btree_id btree_id,
BUG_ON(!bch2_bkey_pack_key(k, &uk, out)); BUG_ON(!bch2_bkey_pack_key(k, &uk, out));
} }
} }
break;
case 3:
if (!bkey_packed(k)) { if (!bkey_packed(k)) {
u = bkey_i_to_s(packed_to_bkey(k)); u = bkey_i_to_s(packed_to_bkey(k));
} else { } else {
...@@ -328,4 +339,8 @@ void __bch2_bkey_compat(unsigned level, enum btree_id btree_id, ...@@ -328,4 +339,8 @@ void __bch2_bkey_compat(unsigned level, enum btree_id btree_id,
if (ops->compat) if (ops->compat)
ops->compat(btree_id, version, big_endian, write, u); ops->compat(btree_id, version, big_endian, write, u);
break;
default:
BUG();
}
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment