|
@@ -145,6 +145,15 @@ dasd_diag_erp(struct dasd_device *device)
|
|
|
|
|
|
mdsk_term_io(device);
|
|
|
rc = mdsk_init_io(device, device->block->bp_block, 0, NULL);
|
|
|
+ if (rc == 4) {
|
|
|
+ if (!(device->features & DASD_FEATURE_READONLY)) {
|
|
|
+ dev_warn(&device->cdev->dev,
|
|
|
+ "The access mode of a DIAG device changed"
|
|
|
+ " to read-only");
|
|
|
+ device->features |= DASD_FEATURE_READONLY;
|
|
|
+ }
|
|
|
+ rc = 0;
|
|
|
+ }
|
|
|
if (rc)
|
|
|
dev_warn(&device->cdev->dev, "DIAG ERP failed with "
|
|
|
"rc=%d\n", rc);
|
|
@@ -433,16 +442,20 @@ dasd_diag_check_device(struct dasd_device *device)
|
|
|
for (sb = 512; sb < bsize; sb = sb << 1)
|
|
|
block->s2b_shift++;
|
|
|
rc = mdsk_init_io(device, block->bp_block, 0, NULL);
|
|
|
- if (rc) {
|
|
|
+ if (rc && (rc != 4)) {
|
|
|
dev_warn(&device->cdev->dev, "DIAG initialization "
|
|
|
"failed with rc=%d\n", rc);
|
|
|
rc = -EIO;
|
|
|
} else {
|
|
|
+ if (rc == 4)
|
|
|
+ device->features |= DASD_FEATURE_READONLY;
|
|
|
dev_info(&device->cdev->dev,
|
|
|
- "New DASD with %ld byte/block, total size %ld KB\n",
|
|
|
+ "New DASD with %ld byte/block, total size %ld KB%s\n",
|
|
|
(unsigned long) block->bp_block,
|
|
|
(unsigned long) (block->blocks <<
|
|
|
- block->s2b_shift) >> 1);
|
|
|
+ block->s2b_shift) >> 1,
|
|
|
+ (rc == 4) ? ", read-only device" : "");
|
|
|
+ rc = 0;
|
|
|
}
|
|
|
out_label:
|
|
|
free_page((long) label);
|