aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/s390/block/dasd.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 80e45de096a9..fb613d70c2cb 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -1107,17 +1107,22 @@ void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm,
1107 if (cqr) 1107 if (cqr)
1108 memcpy(&cqr->irb, irb, sizeof(*irb)); 1108 memcpy(&cqr->irb, irb, sizeof(*irb));
1109 device = dasd_device_from_cdev_locked(cdev); 1109 device = dasd_device_from_cdev_locked(cdev);
1110 if (!IS_ERR(device)) { 1110 if (IS_ERR(device))
1111 device->discipline->dump_sense_dbf(device, irb, 1111 return;
1112 "unsolicited"); 1112 /* ignore unsolicited interrupts for DIAG discipline */
1113 if ((device->features & DASD_FEATURE_ERPLOG)) 1113 if (device->discipline == dasd_diag_discipline_pointer) {
1114 device->discipline->dump_sense(device, cqr,
1115 irb);
1116 dasd_device_clear_timer(device);
1117 device->discipline->handle_unsolicited_interrupt(device,
1118 irb);
1119 dasd_put_device(device); 1114 dasd_put_device(device);
1115 return;
1120 } 1116 }
1117 device->discipline->dump_sense_dbf(device, irb,
1118 "unsolicited");
1119 if ((device->features & DASD_FEATURE_ERPLOG))
1120 device->discipline->dump_sense(device, cqr,
1121 irb);
1122 dasd_device_clear_timer(device);
1123 device->discipline->handle_unsolicited_interrupt(device,
1124 irb);
1125 dasd_put_device(device);
1121 return; 1126 return;
1122 } 1127 }
1123 1128