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: | drivers/net/wireless/ath9k/xmit.c |
Line in file: | 1846 |
Project: | Linux Kernel |
Project version: | 2.6.28 |
Tools: |
Undetermined 1
|
Entered: | 2012-03-04 17:07:06 UTC |
1816 /* update baw for software retried frame */ 1817 if (bf_isretried(bf)) 1818 ath_tx_update_baw(sc, tid, bf->bf_seqno); 1819 1820 /* 1821 * do not indicate packets while holding txq spinlock. 1822 * unlock is intentional here 1823 */ 1824 if (likely(bh_flag)) 1825 spin_unlock_bh(&txq->axq_lock); 1826 else 1827 spin_unlock(&txq->axq_lock); 1828 1829 /* complete this sub-frame */ 1830 ath_tx_complete_buf(sc, bf, &bf_head, 0, 0); 1831 1832 if (likely(bh_flag)) 1833 spin_lock_bh(&txq->axq_lock); 1834 else 1835 spin_lock(&txq->axq_lock); 1836 } 1837 1838 /* 1839 * TODO: For frame(s) that are in the retry state, we will reuse the 1840 * sequence number(s) without setting the retry bit. The 1841 * alternative is to give up on these and BAR the receiver's window 1842 * forward. 1843 */ 1844 tid->seq_next = tid->seq_start; 1845 tid->baw_tail = tid->baw_head; 1846} 1847 1848/* 1849 * Drain all pending buffers 1850 * NB: must be called with txq lock held 1851 */ 1852 1853static void ath_txq_drain_pending_buffers(struct ath_softc *sc, 1854 struct ath_txq *txq, 1855 bool bh_flag) 1856{