s390/dasd: fix hanging device offline processing
[linux-2.6-microblaze.git] / drivers / s390 / block / dasd_alias.c
index 99f8661..31e8b5d 100644 (file)
@@ -462,11 +462,19 @@ static int read_unit_address_configuration(struct dasd_device *device,
        spin_unlock_irqrestore(&lcu->lock, flags);
 
        rc = dasd_sleep_on(cqr);
-       if (rc && !suborder_not_supported(cqr)) {
+       if (!rc)
+               goto out;
+
+       if (suborder_not_supported(cqr)) {
+               /* suborder not supported or device unusable for IO */
+               rc = -EOPNOTSUPP;
+       } else {
+               /* IO failed but should be retried */
                spin_lock_irqsave(&lcu->lock, flags);
                lcu->flags |= NEED_UAC_UPDATE;
                spin_unlock_irqrestore(&lcu->lock, flags);
        }
+out:
        dasd_sfree_request(cqr, cqr->memdev);
        return rc;
 }