Commit c6f990d1ff8e4e53b12f4175eb7d7ea710c3ca73
Committed by
Alex Elder
1 parent
5315837dae
Exists in
master
and in
4 other branches
xfs: handle CIl transaction commit failures correctly
Failure to commit a transaction into the CIL is not handled correctly. This currently can only happen when racing with a shutdown and requires an explicit shutdown check, so it rare and can be avoided. Remove the shutdown check and make the CIL commit a void function to indicate it will always succeed, thereby removing the incorrectly handled failure case. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Alex Elder <aelder@sgi.com>
Showing 3 changed files with 3 additions and 12 deletions Side-by-side Diff
fs/xfs/xfs_log.h
... | ... | @@ -191,7 +191,7 @@ |
191 | 191 | |
192 | 192 | xlog_tid_t xfs_log_get_trans_ident(struct xfs_trans *tp); |
193 | 193 | |
194 | -int xfs_log_commit_cil(struct xfs_mount *mp, struct xfs_trans *tp, | |
194 | +void xfs_log_commit_cil(struct xfs_mount *mp, struct xfs_trans *tp, | |
195 | 195 | struct xfs_log_vec *log_vector, |
196 | 196 | xfs_lsn_t *commit_lsn, int flags); |
197 | 197 | bool xfs_log_item_in_current_chkpt(struct xfs_log_item *lip); |
fs/xfs/xfs_log_cil.c
... | ... | @@ -625,7 +625,7 @@ |
625 | 625 | * background commit, returns without it held once background commits are |
626 | 626 | * allowed again. |
627 | 627 | */ |
628 | -int | |
628 | +void | |
629 | 629 | xfs_log_commit_cil( |
630 | 630 | struct xfs_mount *mp, |
631 | 631 | struct xfs_trans *tp, |
... | ... | @@ -640,11 +640,6 @@ |
640 | 640 | if (flags & XFS_TRANS_RELEASE_LOG_RES) |
641 | 641 | log_flags = XFS_LOG_REL_PERM_RESERV; |
642 | 642 | |
643 | - if (XLOG_FORCED_SHUTDOWN(log)) { | |
644 | - xlog_cil_free_logvec(log_vector); | |
645 | - return XFS_ERROR(EIO); | |
646 | - } | |
647 | - | |
648 | 643 | /* |
649 | 644 | * do all the hard work of formatting items (including memory |
650 | 645 | * allocation) outside the CIL context lock. This prevents stalling CIL |
... | ... | @@ -704,7 +699,6 @@ |
704 | 699 | */ |
705 | 700 | if (push) |
706 | 701 | xlog_cil_push(log, 0); |
707 | - return 0; | |
708 | 702 | } |
709 | 703 | |
710 | 704 | /* |
fs/xfs/xfs_trans.c
... | ... | @@ -1755,7 +1755,6 @@ |
1755 | 1755 | int flags) |
1756 | 1756 | { |
1757 | 1757 | struct xfs_log_vec *log_vector; |
1758 | - int error; | |
1759 | 1758 | |
1760 | 1759 | /* |
1761 | 1760 | * Get each log item to allocate a vector structure for |
... | ... | @@ -1766,9 +1765,7 @@ |
1766 | 1765 | if (!log_vector) |
1767 | 1766 | return ENOMEM; |
1768 | 1767 | |
1769 | - error = xfs_log_commit_cil(mp, tp, log_vector, commit_lsn, flags); | |
1770 | - if (error) | |
1771 | - return error; | |
1768 | + xfs_log_commit_cil(mp, tp, log_vector, commit_lsn, flags); | |
1772 | 1769 | |
1773 | 1770 | current_restore_flags_nested(&tp->t_pflags, PF_FSTRANS); |
1774 | 1771 | xfs_trans_free(tp); |