bcachefs: Copy ptr->cached when migrating data
Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
c47c50f856
commit
922ae9f455
@ -94,10 +94,6 @@ static int bch2_migrate_index_update(struct bch_write_op *op)
|
||||
!bch2_bkey_matches_ptr(c, k, m->ptr, m->offset))
|
||||
goto nomatch;
|
||||
|
||||
if (m->data_cmd == DATA_REWRITE &&
|
||||
!bch2_bkey_has_device(k, m->data_opts.rewrite_dev))
|
||||
goto nomatch;
|
||||
|
||||
bkey_reassemble(&_insert.k, k);
|
||||
insert = &_insert.k;
|
||||
|
||||
@ -109,9 +105,19 @@ static int bch2_migrate_index_update(struct bch_write_op *op)
|
||||
bch2_cut_back(new->k.p, insert);
|
||||
bch2_cut_back(insert->k.p, &new->k_i);
|
||||
|
||||
if (m->data_cmd == DATA_REWRITE)
|
||||
bch2_bkey_drop_device(bkey_i_to_s(insert),
|
||||
m->data_opts.rewrite_dev);
|
||||
if (m->data_cmd == DATA_REWRITE) {
|
||||
struct bch_extent_ptr *new_ptr, *old_ptr = (void *)
|
||||
bch2_bkey_has_device(bkey_i_to_s_c(insert),
|
||||
m->data_opts.rewrite_dev);
|
||||
if (!old_ptr)
|
||||
goto nomatch;
|
||||
|
||||
if (old_ptr->cached)
|
||||
extent_for_each_ptr(extent_i_to_s(new), new_ptr)
|
||||
new_ptr->cached = true;
|
||||
|
||||
bch2_bkey_drop_ptr(bkey_i_to_s(insert), old_ptr);
|
||||
}
|
||||
|
||||
extent_for_each_ptr_decode(extent_i_to_s(new), p, entry) {
|
||||
if (bch2_bkey_has_device(bkey_i_to_s_c(insert), p.ptr.dev)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user