• Boris Burkov's avatar
    btrfs: track original extent owner in head_ref · cf79ac47
    Boris Burkov authored
    Simple quotas requires tracking the original creating root of any given
    extent. This gets complicated when multiple subvolumes create
    overlapping/contradictory refs in the same transaction. For example,
    due to modifying or deleting an extent while also snapshotting it.
    
    To resolve this in a general way, take advantage of the fact that we are
    essentially already tracking this for handling releasing reservations.
    The head ref coalesces the various refs and uses must_insert_reserved to
    check if it needs to create an extent/free reservation. Store the ref
    that set must_insert_reserved as the owning ref on the head ref.
    
    Note that this can result in writing an extent for the very first time
    with an owner different from its only ref, but it will look the same as
    if you first created it with the original owning ref, then added the
    other ref, then removed the owning ref.
    Signed-off-by: default avatarBoris Burkov <boris@bur.io>
    Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
    cf79ac47
delayed-ref.c 33.4 KB