mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
Merge tag 'bcachefs-2025-07-24' of git://evilpiepirate.org/bcachefs
Pull bcachefs fixes from Kent Overstreet:
"User reported fixes:
- Fix btree node scan on encrypted filesystems by not using btree
node header fields encrypted
- Fix a race in btree write buffer flush; this caused EROs primarily
during fsck for some people"
* tag 'bcachefs-2025-07-24' of git://evilpiepirate.org/bcachefs:
bcachefs: Add missing snapshots_seen_add_inorder()
bcachefs: Fix write buffer flushing from open journal entry
bcachefs: btree_node_scan: don't re-read before initializing found_btree_node
This commit is contained in:
@@ -168,14 +168,6 @@ static void try_read_btree_node(struct find_btree_nodes *f, struct bch_dev *ca,
|
||||
if (BTREE_NODE_ID(bn) >= BTREE_ID_NR_MAX)
|
||||
return;
|
||||
|
||||
bio_reset(bio, ca->disk_sb.bdev, REQ_OP_READ);
|
||||
bio->bi_iter.bi_sector = offset;
|
||||
bch2_bio_map(bio, b->data, c->opts.btree_node_size);
|
||||
|
||||
submit_time = local_clock();
|
||||
submit_bio_wait(bio);
|
||||
bch2_account_io_completion(ca, BCH_MEMBER_ERROR_read, submit_time, !bio->bi_status);
|
||||
|
||||
rcu_read_lock();
|
||||
struct found_btree_node n = {
|
||||
.btree_id = BTREE_NODE_ID(bn),
|
||||
@@ -192,6 +184,14 @@ static void try_read_btree_node(struct find_btree_nodes *f, struct bch_dev *ca,
|
||||
};
|
||||
rcu_read_unlock();
|
||||
|
||||
bio_reset(bio, ca->disk_sb.bdev, REQ_OP_READ);
|
||||
bio->bi_iter.bi_sector = offset;
|
||||
bch2_bio_map(bio, b->data, c->opts.btree_node_size);
|
||||
|
||||
submit_time = local_clock();
|
||||
submit_bio_wait(bio);
|
||||
bch2_account_io_completion(ca, BCH_MEMBER_ERROR_read, submit_time, !bio->bi_status);
|
||||
|
||||
found_btree_node_to_key(&b->key, &n);
|
||||
|
||||
CLASS(printbuf, buf)();
|
||||
|
||||
@@ -1920,11 +1920,12 @@ static int check_extent(struct btree_trans *trans, struct btree_iter *iter,
|
||||
"extent type past end of inode %llu:%u, i_size %llu\n%s",
|
||||
i->inode.bi_inum, i->inode.bi_snapshot, i->inode.bi_size,
|
||||
(bch2_bkey_val_to_text(&buf, c, k), buf.buf))) {
|
||||
ret = bch2_fpunch_snapshot(trans,
|
||||
SPOS(i->inode.bi_inum,
|
||||
last_block,
|
||||
i->inode.bi_snapshot),
|
||||
POS(i->inode.bi_inum, U64_MAX));
|
||||
ret = snapshots_seen_add_inorder(c, s, i->inode.bi_snapshot) ?:
|
||||
bch2_fpunch_snapshot(trans,
|
||||
SPOS(i->inode.bi_inum,
|
||||
last_block,
|
||||
i->inode.bi_snapshot),
|
||||
POS(i->inode.bi_inum, U64_MAX));
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
|
||||
@@ -1082,6 +1082,7 @@ static struct journal_buf *__bch2_next_write_buffer_flush_journal_buf(struct jou
|
||||
|
||||
if (open && !*blocked) {
|
||||
__bch2_journal_block(j);
|
||||
s.v = atomic64_read_acquire(&j->reservations.counter);
|
||||
*blocked = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user