diff options
author | Stefan Haberland <stefan.haberland@de.ibm.com> | 2008-12-25 07:38:54 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2008-12-25 07:39:02 -0500 |
commit | 0cd4bd4754d51bdc8f9cd880c29910d0d52337bb (patch) | |
tree | 2f94085835c0a92a18c6520356fddc0875432707 /drivers/s390/block | |
parent | 50afd20f8c3ce23994a21c389e7250e54a93bf55 (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/block')
-rw-r--r-- | drivers/s390/block/dasd.c | 4 |
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 | } |