vfs: remove extraneous NULL d_inode check from do_filp_open
[linux-2.6-block.git] / drivers / s390 / block / dasd_diag.c
index 4e49b4a6c880dce04d2599982846143050f40e61..f64d0db881b42d72153f6f6ebd32e2595799b831 100644 (file)
@@ -24,7 +24,6 @@
 #include <asm/ebcdic.h>
 #include <asm/io.h>
 #include <asm/s390_ext.h>
-#include <asm/todclk.h>
 #include <asm/vtoc.h>
 #include <asm/diag.h>
 
@@ -145,6 +144,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 +441,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);