]> www.infradead.org Git - nvme.git/commit
bcachefs: fix transaction restart handling in check_extents(), check_dirents()
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 24 Sep 2024 02:32:58 +0000 (22:32 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 28 Sep 2024 01:46:35 +0000 (21:46 -0400)
commit3672bda8f5edd8ed23c745965500ceb53286d48d
treef97788d47e10a05a0ca5f15ec37629eef6f6d1b3
parent22a507d68eb8dc9d05b7e91e9a7c9b2566d48c81
bcachefs: fix transaction restart handling in check_extents(), check_dirents()

Dealing with outside state within a btree transaction is always tricky.

check_extents() and check_dirents() have to accumulate counters for
i_sectors and i_nlink (for subdirectories). There were two bugs:

- transaction commit may return a restart; therefore we have to commit
  before accumulating to those counters
- get_inode_all_snapshots() may return a transaction restart, before
  updating w->last_pos; then, on the restart,
  check_i_sectors()/check_subdir_count() would see inodes that were not
  for w->last_pos

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fsck.c