xfs: split and cleanup xfs_log_reserve
Split the log regrant case out of xfs_log_reserve into a separate function, and merge xlog_grant_log_space and xlog_regrant_write_log_space into their respective callers. Also replace the XFS_LOG_PERM_RESERV flag, which easily got misused before the previous cleanups with a simple boolean parameter. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
committed by
Ben Myers
parent
42ceedb3ca
commit
9006fb91cf
@@ -681,7 +681,6 @@ xfs_trans_reserve(
|
||||
uint flags,
|
||||
uint logcount)
|
||||
{
|
||||
int log_flags;
|
||||
int error = 0;
|
||||
int rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0;
|
||||
|
||||
@@ -707,24 +706,32 @@ xfs_trans_reserve(
|
||||
* Reserve the log space needed for this transaction.
|
||||
*/
|
||||
if (logspace > 0) {
|
||||
ASSERT((tp->t_log_res == 0) || (tp->t_log_res == logspace));
|
||||
ASSERT((tp->t_log_count == 0) ||
|
||||
(tp->t_log_count == logcount));
|
||||
bool permanent = false;
|
||||
|
||||
ASSERT(tp->t_log_res == 0 || tp->t_log_res == logspace);
|
||||
ASSERT(tp->t_log_count == 0 || tp->t_log_count == logcount);
|
||||
|
||||
if (flags & XFS_TRANS_PERM_LOG_RES) {
|
||||
log_flags = XFS_LOG_PERM_RESERV;
|
||||
tp->t_flags |= XFS_TRANS_PERM_LOG_RES;
|
||||
permanent = true;
|
||||
} else {
|
||||
ASSERT(tp->t_ticket == NULL);
|
||||
ASSERT(!(tp->t_flags & XFS_TRANS_PERM_LOG_RES));
|
||||
log_flags = 0;
|
||||
}
|
||||
|
||||
error = xfs_log_reserve(tp->t_mountp, logspace, logcount,
|
||||
&tp->t_ticket,
|
||||
XFS_TRANSACTION, log_flags, tp->t_type);
|
||||
if (error) {
|
||||
goto undo_blocks;
|
||||
if (tp->t_ticket != NULL) {
|
||||
ASSERT(flags & XFS_TRANS_PERM_LOG_RES);
|
||||
error = xfs_log_regrant(tp->t_mountp, tp->t_ticket);
|
||||
} else {
|
||||
error = xfs_log_reserve(tp->t_mountp, logspace,
|
||||
logcount, &tp->t_ticket,
|
||||
XFS_TRANSACTION, permanent,
|
||||
tp->t_type);
|
||||
}
|
||||
|
||||
if (error)
|
||||
goto undo_blocks;
|
||||
|
||||
tp->t_log_res = logspace;
|
||||
tp->t_log_count = logcount;
|
||||
}
|
||||
@@ -752,6 +759,8 @@ xfs_trans_reserve(
|
||||
*/
|
||||
undo_log:
|
||||
if (logspace > 0) {
|
||||
int log_flags;
|
||||
|
||||
if (flags & XFS_TRANS_PERM_LOG_RES) {
|
||||
log_flags = XFS_LOG_REL_PERM_RESERV;
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user