Commit 23fb5a93 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong
Browse files

xfs: refactor xfs_buf_ioend



Move the log recovery I/O completion handling entirely into the log
recovery code, and re-arrange the normal I/O completion handler flow
to prepare to lifting more logic into common code in the next commits.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 76b2d323
Loading
Loading
Loading
Loading
+17 −24
Original line number Diff line number Diff line
@@ -1197,34 +1197,27 @@ xfs_buf_ioend(
		if (!bp->b_error)
			bp->b_flags |= XBF_DONE;
		xfs_buf_ioend_finish(bp);
		return;
	}

	if (!bp->b_error) {
		bp->b_flags &= ~XBF_WRITE_FAIL;
		bp->b_flags |= XBF_DONE;
	}

	} else if (bp->b_flags & _XBF_LOGRECOVERY) {
		/*
	 * If this is a log recovery buffer, we aren't doing transactional IO
	 * yet so we need to let it handle IO completions.
		 * If this is a log recovery buffer, we aren't doing
		 * transactional I/O yet so we need to let the log recovery code
		 * handle I/O completions:
		 */
	if (bp->b_flags & _XBF_LOGRECOVERY) {
		xlog_recover_iodone(bp);
		return;
	} else {
		if (!bp->b_error) {
			bp->b_flags &= ~XBF_WRITE_FAIL;
			bp->b_flags |= XBF_DONE;
		}

	if (bp->b_flags & _XBF_INODES) {
		if (bp->b_flags & _XBF_INODES)
			xfs_buf_inode_iodone(bp);
		return;
	}

	if (bp->b_flags & _XBF_DQUOTS) {
		else if (bp->b_flags & _XBF_DQUOTS)
			xfs_buf_dquot_iodone(bp);
		return;
	}
		else
			xfs_buf_iodone(bp);
	}
}

static void
xfs_buf_ioend_work(
+7 −7
Original line number Diff line number Diff line
@@ -269,16 +269,16 @@ void
xlog_recover_iodone(
	struct xfs_buf	*bp)
{
	if (bp->b_error) {
	if (!bp->b_error) {
		bp->b_flags |= XBF_DONE;
	} else if (!XFS_FORCED_SHUTDOWN(bp->b_mount)) {
		/*
		 * We're not going to bother about retrying
		 * this during recovery. One strike!
		 * We're not going to bother about retrying this during
		 * recovery. One strike!
		 */
		if (!XFS_FORCED_SHUTDOWN(bp->b_mount)) {
		xfs_buf_ioerror_alert(bp, __this_address);
		xfs_force_shutdown(bp->b_mount, SHUTDOWN_META_IO_ERROR);
	}
	}

	/*
	 * On v5 supers, a bli could be attached to update the metadata LSN.