aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/block/dasd.c
diff options
context:
space:
mode:
authorStefan Haberland <stefan.haberland@de.ibm.com>2011-10-30 10:16:57 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2011-10-30 10:16:44 -0400
commit5915a873fcb1cea5260940be519f2cdf898f7be3 (patch)
treeca7ce2f06e46f74ed771d93ed97ce55b113dadb3 /drivers/s390/block/dasd.c
parent214b8ffc205bcf2ca5b04b3903be13a9257c3fbd (diff)
[S390] dasd: re-initialize read_conf buffer for retries
The buffer for read configuration data has to be initialized with an EBCDIC string to show support for extended UIDs to z/VM. If this read configuration data CQR needs to be retried, the buffer may have changed in between. So re-initialize the buffer to get a correct extended UID under z/VM. Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/block/dasd.c')
-rw-r--r--drivers/s390/block/dasd.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 3b94b6542fc0..ce2a780a9ea8 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -2059,13 +2059,14 @@ void dasd_add_request_tail(struct dasd_ccw_req *cqr)
2059/* 2059/*
2060 * Wakeup helper for the 'sleep_on' functions. 2060 * Wakeup helper for the 'sleep_on' functions.
2061 */ 2061 */
2062static void dasd_wakeup_cb(struct dasd_ccw_req *cqr, void *data) 2062void dasd_wakeup_cb(struct dasd_ccw_req *cqr, void *data)
2063{ 2063{
2064 spin_lock_irq(get_ccwdev_lock(cqr->startdev->cdev)); 2064 spin_lock_irq(get_ccwdev_lock(cqr->startdev->cdev));
2065 cqr->callback_data = DASD_SLEEPON_END_TAG; 2065 cqr->callback_data = DASD_SLEEPON_END_TAG;
2066 spin_unlock_irq(get_ccwdev_lock(cqr->startdev->cdev)); 2066 spin_unlock_irq(get_ccwdev_lock(cqr->startdev->cdev));
2067 wake_up(&generic_waitq); 2067 wake_up(&generic_waitq);
2068} 2068}
2069EXPORT_SYMBOL_GPL(dasd_wakeup_cb);
2069 2070
2070static inline int _wait_for_wakeup(struct dasd_ccw_req *cqr) 2071static inline int _wait_for_wakeup(struct dasd_ccw_req *cqr)
2071{ 2072{
@@ -2165,7 +2166,9 @@ static int _dasd_sleep_on(struct dasd_ccw_req *maincqr, int interruptible)
2165 } else 2166 } else
2166 wait_event(generic_waitq, !(device->stopped)); 2167 wait_event(generic_waitq, !(device->stopped));
2167 2168
2168 cqr->callback = dasd_wakeup_cb; 2169 if (!cqr->callback)
2170 cqr->callback = dasd_wakeup_cb;
2171
2169 cqr->callback_data = DASD_SLEEPON_START_TAG; 2172 cqr->callback_data = DASD_SLEEPON_START_TAG;
2170 dasd_add_request_tail(cqr); 2173 dasd_add_request_tail(cqr);
2171 if (interruptible) { 2174 if (interruptible) {