> +void > +xfs_trans_cancel_qretry_nblks( > + struct xfs_trans *tp, > + struct xfs_inode *ip) > +{ > + ASSERT(xfs_isilocked(ip, XFS_ILOCK_EXCL)); > + > + xfs_trans_cancel(tp); > + xfs_iunlock(ip, XFS_ILOCK_EXCL); > + xfs_blockgc_free_quota(ip, 0); > +} I still find this helper a little weird. Why not cancel the transaction in xfs_trans_reserve_quota_nblks, and then just open code the calls to xfs_iunlock and xfs_blockgc_free_quota in the callers?