@@ -2980,6 +2980,21 @@ xfs_log_ticket_regrant(
xfs_log_ticket_put(ticket);
}
+/*
+ * Restore log reservation directly to the grant heads.
+ */
+void
+xfs_log_ungrant_bytes(
+ struct xfs_mount *mp,
+ int bytes)
+{
+ struct xlog *log = mp->m_log;
+
+ xlog_grant_sub_space(log, &log->l_reserve_head.grant, bytes);
+ xlog_grant_sub_space(log, &log->l_write_head.grant, bytes);
+ xfs_log_space_wake(mp);
+}
+
/*
* Give back the space left from a reservation.
*
@@ -3018,12 +3033,9 @@ xfs_log_ticket_ungrant(
bytes += ticket->t_unit_res*ticket->t_cnt;
}
- xlog_grant_sub_space(log, &log->l_reserve_head.grant, bytes);
- xlog_grant_sub_space(log, &log->l_write_head.grant, bytes);
-
+ xfs_log_ungrant_bytes(log->l_mp, bytes);
trace_xfs_log_ticket_ungrant_exit(log, ticket);
- xfs_log_space_wake(log->l_mp);
xfs_log_ticket_put(ticket);
}
@@ -125,6 +125,7 @@ int xfs_log_reserve(struct xfs_mount *mp,
uint8_t clientid,
bool permanent);
int xfs_log_regrant(struct xfs_mount *mp, struct xlog_ticket *tic);
+void xfs_log_ungrant_bytes(struct xfs_mount *mp, int bytes);
void xfs_log_unmount(struct xfs_mount *mp);
int xfs_log_force_umount(struct xfs_mount *mp, int logerror);