[S390] dasd: wait for terminated request
authorStefan Haberland <stefan.haberland@de.ibm.com>
Sun, 30 Oct 2011 14:16:56 +0000 (15:16 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Sun, 30 Oct 2011 14:16:44 +0000 (15:16 +0100)
After terminating a request in the dasd_sleep_on_immediatly function,
wait for the clear interrupt to be received before starting the
new request. This prevents the requests from getting mixed up.

Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/block/dasd.c

index 46054c75cf3165ff02b33e1738c6d63dd9db2ed0..3b94b6542fc0a4cdfccac6a883d468fb18e5a40d 100644 (file)
@@ -2261,7 +2261,11 @@ int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr)
        cqr->callback = dasd_wakeup_cb;
        cqr->callback_data = DASD_SLEEPON_START_TAG;
        cqr->status = DASD_CQR_QUEUED;
-       list_add(&cqr->devlist, &device->ccw_queue);
+       /*
+        * add new request as second
+        * first the terminated cqr needs to be finished
+        */
+       list_add(&cqr->devlist, device->ccw_queue.next);
 
        /* let the bh start the request to keep them in order */
        dasd_schedule_device_bh(device);