User: | Jiri Slaby |
Error type: | Leaving function in locked state |
Error type description: | Some lock is not unlocked on all paths of a function, so it is leaked |
File location: | fs/xfs/xfs_extfree_item.c |
Line in file: | 125 |
Project: | Linux Kernel |
Project version: | 2.6.28 |
Tools: |
Stanse
(1.2)
|
Entered: | 2012-03-02 21:35:18 UTC |
95xfs_efi_item_pin(xfs_efi_log_item_t *efip) 96{ 97 return; 98} 99 100 101/* 102 * While EFIs cannot really be pinned, the unpin operation is the 103 * last place at which the EFI is manipulated during a transaction. 104 * Here we coordinate with xfs_efi_cancel() to determine who gets to 105 * free the EFI. 106 */ 107/*ARGSUSED*/ 108STATIC void 109xfs_efi_item_unpin(xfs_efi_log_item_t *efip, int stale) 110{ 111 xfs_mount_t *mp; 112 113 mp = efip->efi_item.li_mountp; 114 spin_lock(&mp->m_ail_lock); 115 if (efip->efi_flags & XFS_EFI_CANCELED) { 116 /* 117 * xfs_trans_delete_ail() drops the AIL lock. 118 */ 119 xfs_trans_delete_ail(mp, (xfs_log_item_t *)efip); 120 xfs_efi_item_free(efip); 121 } else { 122 efip->efi_flags |= XFS_EFI_COMMITTED; 123 spin_unlock(&mp->m_ail_lock); 124 } 125} 126 127/* 128 * like unpin only we have to also clear the xaction descriptor 129 * pointing the log item if we free the item. This routine duplicates 130 * unpin because efi_flags is protected by the AIL lock. Freeing 131 * the descriptor and then calling unpin would force us to drop the AIL 132 * lock which would open up a race condition. 133 */ 134STATIC void 135xfs_efi_item_unpin_remove(xfs_efi_log_item_t *efip, xfs_trans_t *tp)