aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/block/dasd.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/block/dasd.c')
-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}