• Darrick J. Wong's avatar
    xfs: queue deferred rmap ops for cow staging extent alloc/free in the right order · 0525e952
    Darrick J. Wong authored
    Under the deferred rmap operation scheme, there's a certain order in
    which the rmap deferred ops have to be queued to maintain integrity
    during log replay.  For alloc/map operations that order is cui -> rui;
    for free/unmap operations that order is cui -> rui -> efi.  However, the
    initial refcount code got the ordering wrong in the free side of things
    because it queued refcount free op and an EFI and the refcount free op
    queued a rmap free op, resulting in the order cui -> efi -> rui.
    
    If we fail before the efd finishes, the efi recovery will try to do a
    wildcard rmap removal and the subsequent rui will fail to find the rmap
    and blow up.  This didn't ever happen due to other screws up in handling
    unknown owner rmap removals, but those other screw ups broke recovery in
    other ways, so fix the ordering to follow the intended rules.
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    0525e952
xfs_refcount.c 46.2 KB