diff options
Diffstat (limited to 'drivers/s390/block/dasd.c')
-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 | } |