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 | |
| 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')
| -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 | } |
