[XFS] Fix sparse warning in xlog_recover_do_efd_trans.
authorDavid Chinner <dgc@sgi.com>
Fri, 23 Nov 2007 05:28:17 +0000 (16:28 +1100)
committerLachlan McIlroy <lachlan@redback.melbourne.sgi.com>
Thu, 7 Feb 2008 07:15:29 +0000 (18:15 +1100)
Sparse trips over the locking order in xlog_recover_do_efd_trans() when
xfs_trans_delete_ail() drops the ail lock. Because the unlock is
conditional, we need to either annotate with a "fake unlock" or change the
structure of the code so sparse thinks the function always unlocks.

Reordering the code makes it simpler, so do that.

SGI-PV: 972755
SGI-Modid: xfs-linux-melb:xfs-kern:30003a

Signed-off-by: David Chinner <dgc@sgi.com>
Signed-off-by: Christoph Hellwig <hch@infradead.org>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
fs/xfs/xfs_log_recover.c

index 3b804b93b28205aaa2910dfb5b3198f9bbf03603..07167296942119f9e7dfccf7b5bd1c16ee6200c5 100644 (file)
@@ -2733,21 +2733,13 @@ xlog_recover_do_efd_trans(
                                 * AIL lock.
                                 */
                                xfs_trans_delete_ail(mp, lip);
-                               break;
+                               xfs_efi_item_free(efip);
+                               return;
                        }
                }
                lip = xfs_trans_next_ail(mp, lip, &gen, NULL);
        }
-
-       /*
-        * If we found it, then free it up.  If it wasn't there, it
-        * must have been overwritten in the log.  Oh well.
-        */
-       if (lip != NULL) {
-               xfs_efi_item_free(efip);
-       } else {
-               spin_unlock(&mp->m_ail_lock);
-       }
+       spin_unlock(&mp->m_ail_lock);
 }
 
 /*