|
@@ -549,9 +549,8 @@ ccw_device_verify_done(struct ccw_device *cdev, int err)
|
|
|
sch = to_subchannel(cdev->dev.parent);
|
|
|
/* Update schib - pom may have changed. */
|
|
|
if (cio_update_schib(sch)) {
|
|
|
- cdev->private->flags.donotify = 0;
|
|
|
- ccw_device_done(cdev, DEV_STATE_NOT_OPER);
|
|
|
- return;
|
|
|
+ err = -ENODEV;
|
|
|
+ goto callback;
|
|
|
}
|
|
|
/* Update lpm with verified path mask. */
|
|
|
sch->lpm = sch->vpm;
|
|
@@ -561,9 +560,8 @@ ccw_device_verify_done(struct ccw_device *cdev, int err)
|
|
|
ccw_device_verify_start(cdev);
|
|
|
return;
|
|
|
}
|
|
|
+callback:
|
|
|
switch (err) {
|
|
|
- case -EOPNOTSUPP: /* path grouping not supported, just set online. */
|
|
|
- cdev->private->options.pgroup = 0;
|
|
|
case 0:
|
|
|
ccw_device_done(cdev, DEV_STATE_ONLINE);
|
|
|
/* Deliver fake irb to device driver, if needed. */
|
|
@@ -586,14 +584,15 @@ ccw_device_verify_done(struct ccw_device *cdev, int err)
|
|
|
cdev->private->flags.donotify = 0;
|
|
|
ccw_device_done(cdev, DEV_STATE_BOXED);
|
|
|
break;
|
|
|
+ case -EACCES:
|
|
|
+ /* Reset oper notify indication after verify error. */
|
|
|
+ cdev->private->flags.donotify = 0;
|
|
|
+ ccw_device_done(cdev, DEV_STATE_DISCONNECTED);
|
|
|
+ break;
|
|
|
default:
|
|
|
/* Reset oper notify indication after verify error. */
|
|
|
cdev->private->flags.donotify = 0;
|
|
|
- if (cdev->online) {
|
|
|
- ccw_device_set_timeout(cdev, 0);
|
|
|
- dev_fsm_event(cdev, DEV_EVENT_NOTOPER);
|
|
|
- } else
|
|
|
- ccw_device_done(cdev, DEV_STATE_NOT_OPER);
|
|
|
+ ccw_device_done(cdev, DEV_STATE_NOT_OPER);
|
|
|
break;
|
|
|
}
|
|
|
}
|