xfs
[Top] [All Lists]

[PATCH 3/4] xfs: refactor xlog_recover_commit_trans

To: xfs@xxxxxxxxxxx
Subject: [PATCH 3/4] xfs: refactor xlog_recover_commit_trans
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Wed, 01 Dec 2010 17:06:23 -0500
References: <20101201220620.340188389@xxxxxxxxxxxxxxxxxxxxxx>
User-agent: quilt/0.48-1
Merge the call to xlog_recover_reorder_trans and the loop over the
recovery items from xlog_recover_do_trans into xlog_recover_commit_trans,
and keep the switch statement over the log item types as a separate helper.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Index: xfs/fs/xfs/xfs_log_recover.c
===================================================================
--- xfs.orig/fs/xfs/xfs_log_recover.c   2010-11-29 15:15:58.174005517 +0100
+++ xfs/fs/xfs/xfs_log_recover.c        2010-11-29 15:27:26.298253879 +0100
@@ -2674,71 +2674,13 @@ xlog_recover_do_efd_trans(
 }
 
 /*
- * Perform the transaction
- *
- * If the transaction modifies a buffer or inode, do it now.  Otherwise,
- * EFIs and EFDs get queued up by adding entries into the AIL for them.
- */
-STATIC int
-xlog_recover_do_trans(
-       xlog_t                  *log,
-       xlog_recover_t          *trans,
-       int                     pass)
-{
-       int                     error = 0;
-       xlog_recover_item_t     *item;
-
-       error = xlog_recover_reorder_trans(log, trans, pass);
-       if (error)
-               return error;
-
-       list_for_each_entry(item, &trans->r_itemq, ri_list) {
-               trace_xfs_log_recover_item_recover(log, trans, item, pass);
-               switch (ITEM_TYPE(item)) {
-               case XFS_LI_BUF:
-                       error = xlog_recover_do_buffer_trans(log, item, pass);
-                       break;
-               case XFS_LI_INODE:
-                       error = xlog_recover_do_inode_trans(log, item, pass);
-                       break;
-               case XFS_LI_EFI:
-                       error = xlog_recover_do_efi_trans(log, item,
-                                                         trans->r_lsn, pass);
-                       break;
-               case XFS_LI_EFD:
-                       xlog_recover_do_efd_trans(log, item, pass);
-                       error = 0;
-                       break;
-               case XFS_LI_DQUOT:
-                       error = xlog_recover_do_dquot_trans(log, item, pass);
-                       break;
-               case XFS_LI_QUOTAOFF:
-                       error = xlog_recover_do_quotaoff_trans(log, item,
-                                                              pass);
-                       break;
-               default:
-                       xlog_warn(
-       "XFS: invalid item type (%d) xlog_recover_do_trans", ITEM_TYPE(item));
-                       ASSERT(0);
-                       error = XFS_ERROR(EIO);
-                       break;
-               }
-
-               if (error)
-                       return error;
-       }
-
-       return 0;
-}
-
-/*
  * Free up any resources allocated by the transaction
  *
  * Remember that EFIs, EFDs, and IUNLINKs are handled later.
  */
 STATIC void
 xlog_recover_free_trans(
-       xlog_recover_t          *trans)
+       struct xlog_recover     *trans)
 {
        xlog_recover_item_t     *item, *n;
        int                     i;
@@ -2757,17 +2699,65 @@ xlog_recover_free_trans(
 }
 
 STATIC int
+xlog_recover_commit_item(
+       struct log              *log,
+       struct xlog_recover     *trans,
+       xlog_recover_item_t     *item,
+       int                     pass)
+{
+       trace_xfs_log_recover_item_recover(log, trans, item, pass);
+
+       switch (ITEM_TYPE(item)) {
+       case XFS_LI_BUF:
+               return xlog_recover_do_buffer_trans(log, item, pass);
+               break;
+       case XFS_LI_INODE:
+               return xlog_recover_do_inode_trans(log, item, pass);
+       case XFS_LI_EFI:
+               return xlog_recover_do_efi_trans(log, item, trans->r_lsn, pass);
+       case XFS_LI_EFD:
+               xlog_recover_do_efd_trans(log, item, pass);
+               return 0;
+       case XFS_LI_DQUOT:
+               return xlog_recover_do_dquot_trans(log, item, pass);
+       case XFS_LI_QUOTAOFF:
+               return xlog_recover_do_quotaoff_trans(log, item, pass);
+       default:
+               xlog_warn(
+       "XFS: invalid item type (%d) xlog_recover_do_trans", ITEM_TYPE(item));
+               ASSERT(0);
+               return XFS_ERROR(EIO);
+       }
+}
+
+/*
+ * Perform the transaction.
+ *
+ * If the transaction modifies a buffer or inode, do it now.  Otherwise,
+ * EFIs and EFDs get queued up by adding entries into the AIL for them.
+ */
+STATIC int
 xlog_recover_commit_trans(
-       xlog_t                  *log,
-       xlog_recover_t          *trans,
+       struct log              *log,
+       struct xlog_recover     *trans,
        int                     pass)
 {
-       int                     error;
+       int                     error = 0;
+       xlog_recover_item_t     *item;
 
        hlist_del(&trans->r_list);
-       if ((error = xlog_recover_do_trans(log, trans, pass)))
+
+       error = xlog_recover_reorder_trans(log, trans, pass);
+       if (error)
                return error;
-       xlog_recover_free_trans(trans);                 /* no error */
+
+       list_for_each_entry(item, &trans->r_itemq, ri_list) {
+               error = xlog_recover_commit_item(log, trans, item, pass);
+               if (error)
+                       return error;
+       }
+
+       xlog_recover_free_trans(trans);
        return 0;
 }
 

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