[S390] cio: handle error during path verification consistently

Handle verification errors consistently through the existing
callback ccw_device_done to reduce cleanup code duplication.

Signed-off-by: Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Peter Oberparleiter 2009-12-07 12:51:22 +01:00 committed by Martin Schwidefsky
parent 736b5db895
commit 7c4d964fa4
2 changed files with 10 additions and 11 deletions

View File

@ -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;
}
}

View File

@ -423,7 +423,7 @@ __ccw_device_verify_start(struct ccw_device *cdev)
/* Permanent path failure, try next. */
}
/* Done with all paths. */
ccw_device_verify_done(cdev, (sch->vpm != 0) ? 0 : -ENODEV);
ccw_device_verify_done(cdev, (sch->vpm != 0) ? 0 : -EACCES);
}
/*