• Liu Bo's avatar
    Btrfs: fix warning in backref walking · acdf898d
    Liu Bo authored
    When we do backref walking, we search firstly in queued delayed refs
    and then the on-disk backrefs, but we parse differently for shared
    references, for delayed refs we also add 'ref->root' while for on-disk
    backrefs we don't, this can prevent us from merging refs indexed
    by the same bytenr and cause find_parent_nodes() to throw a warning at
    'WARN_ON(ref->count < 0)', for example, when we have a shared data extent
    with 'ref_cnt=1' and a delayed shared data with a BTRFS_DROP_DELAYED_REF,
    that happens.
    
    For shared references, no matter if it's delayed or on-disk, ref->root is
    not at all used, instead it's ref->parent that really matters, so this has
    delayed refs handled as the same way as on-disk refs.
    Signed-off-by: default avatarLiu Bo <bo.li.liu@oracle.com>
    Signed-off-by: default avatarChris Mason <clm@fb.com>
    acdf898d
backref.c 52.1 KB