aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorStefan Haberland <stefan.haberland@de.ibm.com>2008-12-25 07:38:54 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2008-12-25 07:39:02 -0500
commit0cd4bd4754d51bdc8f9cd880c29910d0d52337bb (patch)
tree2f94085835c0a92a18c6520356fddc0875432707 /drivers/s390
parent50afd20f8c3ce23994a21c389e7250e54a93bf55 (diff)
[S390] dasd: call cleanup_cqr with request_queue_lock
__dasd_cleanup_cqr should be called with request_queue_lock held and __dasd_block_process_erp with queue_lock Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/block/dasd.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 363bd1303d21..570ae59c1d5e 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -1898,15 +1898,19 @@ restart_cb:
1898 wait_event(dasd_flush_wq, (cqr->status < DASD_CQR_QUEUED)); 1898 wait_event(dasd_flush_wq, (cqr->status < DASD_CQR_QUEUED));
1899 /* Process finished ERP request. */ 1899 /* Process finished ERP request. */
1900 if (cqr->refers) { 1900 if (cqr->refers) {
1901 spin_lock_bh(&block->queue_lock);
1901 __dasd_block_process_erp(block, cqr); 1902 __dasd_block_process_erp(block, cqr);
1903 spin_unlock_bh(&block->queue_lock);
1902 /* restart list_for_xx loop since dasd_process_erp 1904 /* restart list_for_xx loop since dasd_process_erp
1903 * might remove multiple elements */ 1905 * might remove multiple elements */
1904 goto restart_cb; 1906 goto restart_cb;
1905 } 1907 }
1906 /* call the callback function */ 1908 /* call the callback function */
1909 spin_lock_irq(&block->request_queue_lock);
1907 cqr->endclk = get_clock(); 1910 cqr->endclk = get_clock();
1908 list_del_init(&cqr->blocklist); 1911 list_del_init(&cqr->blocklist);
1909 __dasd_cleanup_cqr(cqr); 1912 __dasd_cleanup_cqr(cqr);
1913 spin_unlock_irq(&block->request_queue_lock);
1910 } 1914 }
1911 return rc; 1915 return rc;
1912} 1916}