• Kent Overstreet's avatar
    bcachefs: Start using bpos.snapshot field · e751c01a
    Kent Overstreet authored
    This patch starts treating the bpos.snapshot field like part of the key
    in the btree code:
    
    * bpos_successor() and bpos_predecessor() now include the snapshot field
    * Keys in btrees that will be using snapshots (extents, inodes, dirents
      and xattrs) now always have their snapshot field set to U32_MAX
    
    The btree iterator code gets a new flag, BTREE_ITER_ALL_SNAPSHOTS, that
    determines whether we're iterating over keys in all snapshots or not -
    internally, this controlls whether bkey_(successor|predecessor)
    increment/decrement the snapshot field, or only the higher bits of the
    key.
    
    We add a new member to struct btree_iter, iter->snapshot: when
    BTREE_ITER_ALL_SNAPSHOTS is not set, iter->pos.snapshot should always
    equal iter->snapshot, which will be 0 for btrees that don't use
    snapshots, and alsways U32_MAX for btrees that will use snapshots
    (until we enable snapshot creation).
    
    This patch also introduces a new metadata version number, and compat
    code for reading from/writing to older versions - this isn't a forced
    upgrade (yet).
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@gmail.com>
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    e751c01a
bcachefs_format.h 44.1 KB