/* * Efd items have no locking or pushing, so return failure * so that the caller doesn't bother with us. */ STATIC void xfs_efd_item_unlock( struct xfs_log_item *lip) { if (lip->li_flags & XFS_LI_ABORTED) xfs_efd_item_free(EFD_ITEM(lip)); }
/*ARGSUSED*/ STATIC void xfs_efd_item_unlock(xfs_efd_log_item_t *efdp) { if (efdp->efd_item.li_flags & XFS_LI_ABORTED) xfs_efd_item_free(efdp); return; }
/*ARGSUSED*/ STATIC xfs_lsn_t xfs_efd_item_committed(xfs_efd_log_item_t *efdp, xfs_lsn_t lsn) { /* * If we got a log I/O error, it's always the case that the LR with the * EFI got unpinned and freed before the EFD got aborted. */ if ((efdp->efd_item.li_flags & XFS_LI_ABORTED) == 0) xfs_efi_release(efdp->efd_efip, efdp->efd_format.efd_nextents); xfs_efd_item_free(efdp); return (xfs_lsn_t)-1; }
/* * The transaction of which this EFD is a part has been aborted. * Inform its companion EFI of this fact and then clean up after * ourselves. No need to clean up the slot for the item in the * transaction. That was done by the unpin code which is called * prior to this routine in the abort/fs-shutdown path. */ STATIC void xfs_efd_item_abort(xfs_efd_log_item_t *efdp) { /* * If we got a log I/O error, it's always the case that the LR with the * EFI got unpinned and freed before the EFD got aborted. So don't * reference the EFI at all in that case. */ if ((efdp->efd_item.li_flags & XFS_LI_ABORTED) == 0) xfs_efi_cancel(efdp->efd_efip); xfs_efd_item_free(efdp); }