mmc: queue: Fix queue_lock spinlock bug from CMDQ shutdown path
CMDQ shutdown path calls blk_cleanup_queue, which changes queue_lock from driver lock to it's original request_queue lock. Hence during above shutdown process if below sequence is exercised as well then may see below spinlock bug. a) Some process say iozoneA has already acquired queue_lock (which is md->lock). b) adb reboot has been issued and CMDQ driver has completed calling blk_cleanup_queue which switches the queue_lock from md->lock to q->__queue_lock. c) ProcessA tries to release queue_lock but finds an unbalance that the lock is already released Hence remove blk_cleanup_queue and instead make sure there are no active_reqs in flight by mmccmdqd before this kthread is exited. Callstack: <6> BUG: spinlock already unlocked on CPU#6, iozone/4391 <6> lock: 0xffffffc06ab8be80, .magic: dead4ead, .owner: <none>/-1, .owner_cpu: -1 [ffffffc0420e3b28] __delay at ffffffc00031a328 [ffffffc0420e3b38] __const_udelay at ffffffc00031a304 [ffffffc0420e3b58] msm_trigger_wdog_bite at ffffffc0004476cc [ffffffc0420e3b68] spin_bug at ffffffc0000e4554 [ffffffc0420e3b98] do_raw_spin_unlock at ffffffc0000e47a0 [ffffffc0420e3bc8] _raw_spin_unlock_irq at ffffffc000db3ee0 [ffffffc0420e3be8] blk_queue_bio at ffffffc0002ff1e4 [ffffffc0420e3bf8] generic_make_request at ffffffc0002fd210 [ffffffc0420e3c58] submit_bio at ffffffc0002fd328 [ffffffc0420e3ca8] submit_bio_wait at ffffffc0002f5768 [ffffffc0420e3d00] compat_sys_call_table at ffffffc00008e000 [ffffffc0420e3d18] submit_bio_wait at ffffffc0002f574c [ffffffc0420e3d38] __blkdev_issue_flush at ffffffc00030043c [ffffffc0420e3da8] blkdev_issue_flush at ffffffc000300494 [ffffffc0420e3dd8] ext4_sync_fs at ffffffc0002597a4 CRs-fixed: 953541 Change-Id: I769cc25c14b6d873f64a898d6b73f33cc59d9c5d Signed-off-by:Ritesh Harjani <riteshh@codeaurora.org> [xiaonian@codeaurora.org: fixed trivial merge conflicts] Signed-off-by:
Xiaonian Wang <xiaonian@codeaurora.org>
Loading
Please register or sign in to comment