> +int > +xlog_write_done( > + struct xlog *log, > struct xlog_ticket *ticket, > struct xlog_in_core **iclog, > + xfs_lsn_t *lsn) > { > + if (XLOG_FORCED_SHUTDOWN(log)) > + return -EIO; > > + return xlog_commit_record(log, ticket, iclog, lsn); > +} Can we just move the XLOG_FORCED_SHUTDOWN check into xlog_commit_record and call xlog_commit_record directly? > > +/* > + * Release or regrant the ticket reservation now the transaction is done with > + * it depending on caller context. Rolling transactions need the ticket > + * regranted, otherwise we release it completely. > + */ > +void > +xlog_ticket_done( > + struct xlog *log, > + struct xlog_ticket *ticket, > + bool regrant) > +{ > if (!regrant) { > trace_xfs_log_done_nonperm(log, ticket); > xlog_ungrant_log_space(log, ticket); > } else { > trace_xfs_log_done_perm(log, ticket); > xlog_regrant_reserve_log_space(log, ticket); > } > xfs_log_ticket_put(ticket); I'd move the trace points and the call to xfs_log_ticket_put into xlog_ungrant_log_space and xlog_regrant_reserve_log_space, and then call the two functions directly from the callers. There is only a single place the ever regrants anyway.