From 9e5334c8d7f2ae64b0e9246bc7149deb24b74818 Mon Sep 17 00:00:00 2001 From: Stefan Haberland Date: Thu, 25 Dec 2008 13:38:54 +0100 Subject: [PATCH] --- yaml --- r: 121376 b: refs/heads/master c: 0cd4bd4754d51bdc8f9cd880c29910d0d52337bb h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/s390/block/dasd.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index c036a7db1c6b..62ee9adab896 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 50afd20f8c3ce23994a21c389e7250e54a93bf55 +refs/heads/master: 0cd4bd4754d51bdc8f9cd880c29910d0d52337bb diff --git a/trunk/drivers/s390/block/dasd.c b/trunk/drivers/s390/block/dasd.c index 363bd1303d21..570ae59c1d5e 100644 --- a/trunk/drivers/s390/block/dasd.c +++ b/trunk/drivers/s390/block/dasd.c @@ -1898,15 +1898,19 @@ static int dasd_flush_block_queue(struct dasd_block *block) wait_event(dasd_flush_wq, (cqr->status < DASD_CQR_QUEUED)); /* Process finished ERP request. */ if (cqr->refers) { + spin_lock_bh(&block->queue_lock); __dasd_block_process_erp(block, cqr); + spin_unlock_bh(&block->queue_lock); /* restart list_for_xx loop since dasd_process_erp * might remove multiple elements */ goto restart_cb; } /* call the callback function */ + spin_lock_irq(&block->request_queue_lock); cqr->endclk = get_clock(); list_del_init(&cqr->blocklist); __dasd_cleanup_cqr(cqr); + spin_unlock_irq(&block->request_queue_lock); } return rc; }