diff options
author | David Chinner <dgc@sgi.com> | 2007-11-23 00:28:17 -0500 |
---|---|---|
committer | Lachlan McIlroy <lachlan@redback.melbourne.sgi.com> | 2008-02-07 02:15:29 -0500 |
commit | 8ae2c0f64a81a93d2c394eacee29d6ced53b54f9 (patch) | |
tree | 6a28f5609daaaa7e8b069323c9a19e9cd87772c4 /fs/xfs/xfs_log_recover.c | |
parent | a8272ce0c1d49aa3bec57682678f0bdfe28ed4ca (diff) |
[XFS] Fix sparse warning in xlog_recover_do_efd_trans.
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>
Diffstat (limited to 'fs/xfs/xfs_log_recover.c')
-rw-r--r-- | fs/xfs/xfs_log_recover.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 3b804b93b282..071672969421 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c | |||
@@ -2733,21 +2733,13 @@ xlog_recover_do_efd_trans( | |||
2733 | * AIL lock. | 2733 | * AIL lock. |
2734 | */ | 2734 | */ |
2735 | xfs_trans_delete_ail(mp, lip); | 2735 | xfs_trans_delete_ail(mp, lip); |
2736 | break; | 2736 | xfs_efi_item_free(efip); |
2737 | return; | ||
2737 | } | 2738 | } |
2738 | } | 2739 | } |
2739 | lip = xfs_trans_next_ail(mp, lip, &gen, NULL); | 2740 | lip = xfs_trans_next_ail(mp, lip, &gen, NULL); |
2740 | } | 2741 | } |
2741 | 2742 | spin_unlock(&mp->m_ail_lock); | |
2742 | /* | ||
2743 | * If we found it, then free it up. If it wasn't there, it | ||
2744 | * must have been overwritten in the log. Oh well. | ||
2745 | */ | ||
2746 | if (lip != NULL) { | ||
2747 | xfs_efi_item_free(efip); | ||
2748 | } else { | ||
2749 | spin_unlock(&mp->m_ail_lock); | ||
2750 | } | ||
2751 | } | 2743 | } |
2752 | 2744 | ||
2753 | /* | 2745 | /* |