vserver 1.9.3
[linux-2.6.git] / drivers / s390 / block / dasd_diag.c
index 67a896c..deaecd0 100644 (file)
@@ -6,7 +6,7 @@
  * Bugreports.to..: <Linux390@de.ibm.com>
  * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000
  *
- * $Revision: 1.34 $
+ * $Revision: 1.38 $
  */
 
 #include <linux/config.h>
@@ -35,6 +35,8 @@
 
 MODULE_LICENSE("GPL");
 
+struct dasd_discipline dasd_diag_discipline;
+
 struct dasd_diag_private {
        struct dasd_diag_characteristics rdc_data;
        struct dasd_diag_rw_io iob;
@@ -156,7 +158,7 @@ dasd_ext_handler(struct pt_regs *regs, __u16 code)
        unsigned long long expires;
        unsigned long flags;
        char status;
-       int ip, cpu;
+       int ip;
 
        /*
         * Get the external interruption subcode. VM stores
@@ -169,8 +171,6 @@ dasd_ext_handler(struct pt_regs *regs, __u16 code)
        status = *((char *) &S390_lowcore.ext_params + 5);
        ip = S390_lowcore.ext_params;
 
-       cpu = smp_processor_id();
-
        if (!ip) {              /* no intparm: unsolicited interrupt */
                MESSAGE(KERN_DEBUG, "%s", "caught unsolicited interrupt");
                return;
@@ -292,7 +292,7 @@ dasd_diag_check_device(struct dasd_device *device)
                mdsk_term_io(device);
        }
        if (bsize <= PAGE_SIZE && label[3] == bsize &&
-           label[0] == 0xc3d4e2f1 && label[13] != 0) {
+           label[0] == 0xc3d4e2f1) {
                device->blocks = label[7];
                device->bp_block = bsize;
                device->s2b_shift = 0;  /* bits to shift 512 to get a block */
@@ -304,8 +304,11 @@ dasd_diag_check_device(struct dasd_device *device)
                            (device->bp_block >> 10),
                            (device->blocks << device->s2b_shift) >> 1);
                rc = 0;
-       } else
+       } else {
+               DEV_MESSAGE(KERN_WARNING, device, "%s",
+                           "volume has incompatible disk layout");
                rc = -EMEDIUMTYPE;
+       }
        free_page((long) label);
        return rc;
 }
@@ -489,6 +492,7 @@ dasd_diag_init(void)
 
        ctl_set_bit(0, 9);
        register_external_interrupt(0x2603, dasd_ext_handler);
+       dasd_diag_discipline_pointer = &dasd_diag_discipline;
        return 0;
 }
 
@@ -503,6 +507,7 @@ dasd_diag_cleanup(void)
        }
        unregister_external_interrupt(0x2603, dasd_ext_handler);
        ctl_clear_bit(0, 9);
+       dasd_diag_discipline_pointer = NULL;
 }
 
 module_init(dasd_diag_init);