diff options
author | Christoph Hellwig <hch@infradead.org> | 2012-02-19 21:31:31 -0500 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2012-02-22 23:37:04 -0500 |
commit | 9006fb91cfdf22812923f0536c7531c429c1aeab (patch) | |
tree | 36b37fe3df405a57e8ede3d2a40ea6c307f40ae9 /fs/xfs/xfs_trans.c | |
parent | 42ceedb3caffe67c4ec0dfbb78ce410832d429b9 (diff) |
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>
Diffstat (limited to 'fs/xfs/xfs_trans.c')
-rw-r--r-- | fs/xfs/xfs_trans.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index 7adcdf15ae0c..103b00c90004 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c | |||
@@ -681,7 +681,6 @@ xfs_trans_reserve( | |||
681 | uint flags, | 681 | uint flags, |
682 | uint logcount) | 682 | uint logcount) |
683 | { | 683 | { |
684 | int log_flags; | ||
685 | int error = 0; | 684 | int error = 0; |
686 | int rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0; | 685 | int rsvd = (tp->t_flags & XFS_TRANS_RESERVE) != 0; |
687 | 686 | ||
@@ -707,24 +706,32 @@ xfs_trans_reserve( | |||
707 | * Reserve the log space needed for this transaction. | 706 | * Reserve the log space needed for this transaction. |
708 | */ | 707 | */ |
709 | if (logspace > 0) { | 708 | if (logspace > 0) { |
710 | ASSERT((tp->t_log_res == 0) || (tp->t_log_res == logspace)); | 709 | bool permanent = false; |
711 | ASSERT((tp->t_log_count == 0) || | 710 | |
712 | (tp->t_log_count == logcount)); | 711 | ASSERT(tp->t_log_res == 0 || tp->t_log_res == logspace); |
712 | ASSERT(tp->t_log_count == 0 || tp->t_log_count == logcount); | ||
713 | |||
713 | if (flags & XFS_TRANS_PERM_LOG_RES) { | 714 | if (flags & XFS_TRANS_PERM_LOG_RES) { |
714 | log_flags = XFS_LOG_PERM_RESERV; | ||
715 | tp->t_flags |= XFS_TRANS_PERM_LOG_RES; | 715 | tp->t_flags |= XFS_TRANS_PERM_LOG_RES; |
716 | permanent = true; | ||
716 | } else { | 717 | } else { |
717 | ASSERT(tp->t_ticket == NULL); | 718 | ASSERT(tp->t_ticket == NULL); |
718 | ASSERT(!(tp->t_flags & XFS_TRANS_PERM_LOG_RES)); | 719 | ASSERT(!(tp->t_flags & XFS_TRANS_PERM_LOG_RES)); |
719 | log_flags = 0; | ||
720 | } | 720 | } |
721 | 721 | ||
722 | error = xfs_log_reserve(tp->t_mountp, logspace, logcount, | 722 | if (tp->t_ticket != NULL) { |
723 | &tp->t_ticket, | 723 | ASSERT(flags & XFS_TRANS_PERM_LOG_RES); |
724 | XFS_TRANSACTION, log_flags, tp->t_type); | 724 | error = xfs_log_regrant(tp->t_mountp, tp->t_ticket); |
725 | if (error) { | 725 | } else { |
726 | goto undo_blocks; | 726 | error = xfs_log_reserve(tp->t_mountp, logspace, |
727 | logcount, &tp->t_ticket, | ||
728 | XFS_TRANSACTION, permanent, | ||
729 | tp->t_type); | ||
727 | } | 730 | } |
731 | |||
732 | if (error) | ||
733 | goto undo_blocks; | ||
734 | |||
728 | tp->t_log_res = logspace; | 735 | tp->t_log_res = logspace; |
729 | tp->t_log_count = logcount; | 736 | tp->t_log_count = logcount; |
730 | } | 737 | } |
@@ -752,6 +759,8 @@ xfs_trans_reserve( | |||
752 | */ | 759 | */ |
753 | undo_log: | 760 | undo_log: |
754 | if (logspace > 0) { | 761 | if (logspace > 0) { |
762 | int log_flags; | ||
763 | |||
755 | if (flags & XFS_TRANS_PERM_LOG_RES) { | 764 | if (flags & XFS_TRANS_PERM_LOG_RES) { |
756 | log_flags = XFS_LOG_REL_PERM_RESERV; | 765 | log_flags = XFS_LOG_REL_PERM_RESERV; |
757 | } else { | 766 | } else { |