Skip to content
  • Brian Foster's avatar
    xfs: use EFI refcount consistently in log recovery · e32a1d1f
    Brian Foster authored
    
    
    The EFI is initialized with a reference count of 2. One for the EFI to
    ensure the item makes it to the AIL and one for the subsequently created
    EFD to release the EFI once the EFD is committed. Log recovery uses the
    EFI in a similar manner, but implements a hack to remove both references
    in one call once the EFD is handled.
    
    Update log recovery to use EFI reference counting in a manner consistent
    with the log. When an EFI is encountered during recovery, an EFI item is
    allocated and inserted to the AIL directly. Since the EFI reference is
    typically dropped when the EFI is unpinned and this is analogous with
    AIL insertion, drop the EFI reference at this point.
    
    When a corresponding EFD is encountered in the log, this indicates that
    the extents were freed, no processing is required and the EFI can be
    dropped. Update xlog_recover_efd_pass2() to simply drop the EFD
    reference at this point rather than open code the AIL removal and EFI
    free.
    
    Remaining EFIs (i.e., with no corresponding EFD) are processed in
    xlog_recover_finish(). An EFD transaction is allocated and the extents
    are freed, which transfers ownership of the EFI reference to the EFD
    item in the log.
    
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
    Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
    e32a1d1f