X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fs390%2Fblock%2Fdasd_diag.c;h=deaecd080203405d281ae83e19b261038e6a29a3;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=67a896cd4f35d0015c67c06c6c7acc36a8dd8071;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c index 67a896cd4..deaecd080 100644 --- a/drivers/s390/block/dasd_diag.c +++ b/drivers/s390/block/dasd_diag.c @@ -6,7 +6,7 @@ * Bugreports.to..: * (C) IBM Corporation, IBM Deutschland Entwicklung GmbH, 1999,2000 * - * $Revision: 1.34 $ + * $Revision: 1.38 $ */ #include @@ -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);