|
|
@@ -383,6 +383,20 @@ suborder_not_supported(struct dasd_ccw_req *cqr)
|
|
|
char msg_format;
|
|
|
char msg_no;
|
|
|
|
|
|
+ /*
|
|
|
+ * intrc values ENODEV, ENOLINK and EPERM
|
|
|
+ * will be optained from sleep_on to indicate that no
|
|
|
+ * IO operation can be started
|
|
|
+ */
|
|
|
+ if (cqr->intrc == -ENODEV)
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ if (cqr->intrc == -ENOLINK)
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ if (cqr->intrc == -EPERM)
|
|
|
+ return 1;
|
|
|
+
|
|
|
sense = dasd_get_sense(&cqr->irb);
|
|
|
if (!sense)
|
|
|
return 0;
|
|
|
@@ -447,12 +461,8 @@ static int read_unit_address_configuration(struct dasd_device *device,
|
|
|
lcu->flags &= ~NEED_UAC_UPDATE;
|
|
|
spin_unlock_irqrestore(&lcu->lock, flags);
|
|
|
|
|
|
- do {
|
|
|
- rc = dasd_sleep_on(cqr);
|
|
|
- if (rc && suborder_not_supported(cqr))
|
|
|
- return -EOPNOTSUPP;
|
|
|
- } while (rc && (cqr->retries > 0));
|
|
|
- if (rc) {
|
|
|
+ rc = dasd_sleep_on(cqr);
|
|
|
+ if (rc && !suborder_not_supported(cqr)) {
|
|
|
spin_lock_irqsave(&lcu->lock, flags);
|
|
|
lcu->flags |= NEED_UAC_UPDATE;
|
|
|
spin_unlock_irqrestore(&lcu->lock, flags);
|