diff options
| author | Kent Overstreet <kent.overstreet@linux.dev> | 2024-09-23 22:32:58 -0400 |
|---|---|---|
| committer | Kent Overstreet <kent.overstreet@linux.dev> | 2024-09-27 21:46:35 -0400 |
| commit | 3672bda8f5edd8ed23c745965500ceb53286d48d (patch) | |
| tree | f97788d47e10a05a0ca5f15ec37629eef6f6d1b3 /rust/helpers/build_bug.c | |
| parent | bcachefs: kill inode_walker_entry.seen_this_pos (diff) | |
| download | linux-3672bda8f5edd8ed23c745965500ceb53286d48d.tar.gz linux-3672bda8f5edd8ed23c745965500ceb53286d48d.zip | |
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>
Diffstat (limited to 'rust/helpers/build_bug.c')
0 files changed, 0 insertions, 0 deletions
