summaryrefslogtreecommitdiff
path: root/fs/xfs/xfs_buf.c
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2020-06-30 00:48:47 +0300
committerDarrick J. Wong <darrick.wong@oracle.com>2020-07-06 20:46:58 +0300
commit9fe5c77cbe3cacc60d03ae5940033e4173fc1847 (patch)
tree335771799f7672c8d9f1031fa5531724d235048a /fs/xfs/xfs_buf.c
parent0c7e5afbea9962bc65c54337c30559bf913a97d6 (diff)
downloadlinux-9fe5c77cbe3cacc60d03ae5940033e4173fc1847.tar.xz
xfs: mark log recovery buffers for completion
Log recovery has it's own buffer write completion handler for buffers that it directly recovers. Convert these to direct calls by flagging these buffers as being log recovery buffers. The flag will get cleared by the log recovery IO completion routine, so it will never leak out of log recovery. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Brian Foster <bfoster@redhat.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'fs/xfs/xfs_buf.c')
-rw-r--r--fs/xfs/xfs_buf.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
index 517932675b12..6a2c942372fc 100644
--- a/fs/xfs/xfs_buf.c
+++ b/fs/xfs/xfs_buf.c
@@ -14,6 +14,7 @@
#include "xfs_mount.h"
#include "xfs_trace.h"
#include "xfs_log.h"
+#include "xfs_log_recover.h"
#include "xfs_trans.h"
#include "xfs_buf_item.h"
#include "xfs_errortag.h"
@@ -1207,6 +1208,15 @@ xfs_buf_ioend(
if (read)
goto out_finish;
+ /*
+ * If this is a log recovery buffer, we aren't doing transactional IO
+ * yet so we need to let it handle IO completions.
+ */
+ if (bp->b_flags & _XBF_LOGRECOVERY) {
+ xlog_recover_iodone(bp);
+ return;
+ }
+
if (bp->b_flags & _XBF_INODES) {
xfs_buf_inode_iodone(bp);
return;