Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[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>

authored by

Stefan Haberland and committed by
Martin Schwidefsky
0cd4bd47 50afd20f

+4
+4
drivers/s390/block/dasd.c
··· 1898 1898 wait_event(dasd_flush_wq, (cqr->status < DASD_CQR_QUEUED)); 1899 1899 /* Process finished ERP request. */ 1900 1900 if (cqr->refers) { 1901 + spin_lock_bh(&block->queue_lock); 1901 1902 __dasd_block_process_erp(block, cqr); 1903 + spin_unlock_bh(&block->queue_lock); 1902 1904 /* restart list_for_xx loop since dasd_process_erp 1903 1905 * might remove multiple elements */ 1904 1906 goto restart_cb; 1905 1907 } 1906 1908 /* call the callback function */ 1909 + spin_lock_irq(&block->request_queue_lock); 1907 1910 cqr->endclk = get_clock(); 1908 1911 list_del_init(&cqr->blocklist); 1909 1912 __dasd_cleanup_cqr(cqr); 1913 + spin_unlock_irq(&block->request_queue_lock); 1910 1914 } 1911 1915 return rc; 1912 1916 }