xfs
[Top] [All Lists]

[PATCH v2 2/8] xfs: refactor log record unpack and data processing

To: xfs@xxxxxxxxxxx
Subject: [PATCH v2 2/8] xfs: refactor log record unpack and data processing
From: Brian Foster <bfoster@xxxxxxxxxx>
Date: Thu, 12 Nov 2015 10:37:22 -0500
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1447342648-40012-1-git-send-email-bfoster@xxxxxxxxxx>
References: <1447342648-40012-1-git-send-email-bfoster@xxxxxxxxxx>
xlog_do_recovery_pass() duplicates a couple function calls related to
processing log records because the function must handle wrapping around
the end of the log if the head is behind the tail. This is implemented
as separate loops. CRC verification pass support will modify how records
are processed in both of these loops.

Rather than continue to duplicate code, factor the calls that process a
log record into a new helper and call that helper from both loops. This
patch contains no functional changes.

Signed-off-by: Brian Foster <bfoster@xxxxxxxxxx>
---
 fs/xfs/xfs_log_recover.c | 35 +++++++++++++++++++++++------------
 1 file changed, 23 insertions(+), 12 deletions(-)

diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c
index 4f880d6..236ebaf 100644
--- a/fs/xfs/xfs_log_recover.c
+++ b/fs/xfs/xfs_log_recover.c
@@ -4190,6 +4190,26 @@ xlog_unpack_data(
        return 0;
 }
 
+/*
+ * Unpack and process a log record.
+ */
+STATIC int
+xlog_recover_process(
+       struct xlog             *log,
+       struct hlist_head       rhash[],
+       struct xlog_rec_header  *rhead,
+       char                    *dp,
+       int                     pass)
+{
+       int                     error;
+
+       error = xlog_unpack_data(rhead, dp, log);
+       if (error)
+               return error;
+
+       return xlog_recover_process_data(log, rhash, rhead, dp, pass);
+}
+
 STATIC int
 xlog_valid_rec_header(
        struct xlog             *log,
@@ -4432,12 +4452,8 @@ xlog_do_recovery_pass(
                                        goto bread_err2;
                        }
 
-                       error = xlog_unpack_data(rhead, offset, log);
-                       if (error)
-                               goto bread_err2;
-
-                       error = xlog_recover_process_data(log, rhash,
-                                                       rhead, offset, pass);
+                       error = xlog_recover_process(log, rhash, rhead, offset,
+                                                    pass);
                        if (error)
                                goto bread_err2;
                        blk_no += bblks;
@@ -4465,12 +4481,7 @@ xlog_do_recovery_pass(
                if (error)
                        goto bread_err2;
 
-               error = xlog_unpack_data(rhead, offset, log);
-               if (error)
-                       goto bread_err2;
-
-               error = xlog_recover_process_data(log, rhash,
-                                               rhead, offset, pass);
+               error = xlog_recover_process(log, rhash, rhead, offset, pass);
                if (error)
                        goto bread_err2;
                blk_no += bblks + hblks;
-- 
2.1.0

<Prev in Thread] Current Thread [Next in Thread>