• Kent Overstreet's avatar
    bcachefs: fix transaction restart handling in check_extents(), check_dirents() · 3672bda8
    Kent Overstreet authored
    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: default avatarKent Overstreet <kent.overstreet@linux.dev>
    3672bda8
fsck.c 71.8 KB