[S390] dasd: unit check handling during internal cio I/O
React on unit checks during cio internal I/O. Handle as unsolicited interrupt and advice cio to retry. Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
094f2100d6
commit
a23ed009a7
|
@ -1186,6 +1186,29 @@ void dasd_int_handler(struct ccw_device *cdev, unsigned long intparm,
|
||||||
dasd_schedule_device_bh(device);
|
dasd_schedule_device_bh(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum uc_todo dasd_generic_uc_handler(struct ccw_device *cdev, struct irb *irb)
|
||||||
|
{
|
||||||
|
struct dasd_device *device;
|
||||||
|
|
||||||
|
device = dasd_device_from_cdev_locked(cdev);
|
||||||
|
|
||||||
|
if (IS_ERR(device))
|
||||||
|
goto out;
|
||||||
|
if (test_bit(DASD_FLAG_OFFLINE, &device->flags) ||
|
||||||
|
device->state != device->target ||
|
||||||
|
!device->discipline->handle_unsolicited_interrupt){
|
||||||
|
dasd_put_device(device);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
dasd_device_clear_timer(device);
|
||||||
|
device->discipline->handle_unsolicited_interrupt(device, irb);
|
||||||
|
dasd_put_device(device);
|
||||||
|
out:
|
||||||
|
return UC_TODO_RETRY;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(dasd_generic_uc_handler);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If we have an error on a dasd_block layer request then we cancel
|
* If we have an error on a dasd_block layer request then we cancel
|
||||||
* and return all further requests from the same dasd_block as well.
|
* and return all further requests from the same dasd_block as well.
|
||||||
|
|
|
@ -3436,6 +3436,7 @@ static struct ccw_driver dasd_eckd_driver = {
|
||||||
.freeze = dasd_generic_pm_freeze,
|
.freeze = dasd_generic_pm_freeze,
|
||||||
.thaw = dasd_generic_restore_device,
|
.thaw = dasd_generic_restore_device,
|
||||||
.restore = dasd_generic_restore_device,
|
.restore = dasd_generic_restore_device,
|
||||||
|
.uc_handler = dasd_generic_uc_handler,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -617,6 +617,7 @@ int dasd_generic_notify(struct ccw_device *, int);
|
||||||
void dasd_generic_handle_state_change(struct dasd_device *);
|
void dasd_generic_handle_state_change(struct dasd_device *);
|
||||||
int dasd_generic_pm_freeze(struct ccw_device *);
|
int dasd_generic_pm_freeze(struct ccw_device *);
|
||||||
int dasd_generic_restore_device(struct ccw_device *);
|
int dasd_generic_restore_device(struct ccw_device *);
|
||||||
|
enum uc_todo dasd_generic_uc_handler(struct ccw_device *, struct irb *);
|
||||||
|
|
||||||
int dasd_generic_read_dev_chars(struct dasd_device *, int, void *, int);
|
int dasd_generic_read_dev_chars(struct dasd_device *, int, void *, int);
|
||||||
char *dasd_get_sense(struct irb *);
|
char *dasd_get_sense(struct irb *);
|
||||||
|
|
Loading…
Reference in New Issue