sch = to_subchannel(cdev->dev.parent);
 
+       ccw_device_set_timeout(cdev, 0);
+
        if (state != DEV_STATE_ONLINE)
                cio_disable_subchannel(sch);
 
 
              (stctl & SCSW_STCTL_PRIM_STATUS)))
                return 0;
 
+       /* Clear pending timers for device driver initiated I/O. */
+       if (ending_status)
+               ccw_device_set_timeout(cdev, 0);
        /*
         * Now we are ready to call the device driver interrupt handler.
         */
 
 {
        int ret;
 
+       /* Set a timeout of 60s */
+       ccw_device_set_timeout(cdev, 60*HZ);
+
        cdev->private->state = DEV_STATE_SENSE_PGID;
        cdev->private->imask = 0x80;
        cdev->private->iretry = 5;
                ccw_device_verify_done(cdev, -ENODEV);
                return;
        }
+       /* After 60s path verification is considered to have failed. */
+       ccw_device_set_timeout(cdev, 60*HZ);
        __ccw_device_verify_start(cdev);
 }
 
 void
 ccw_device_disband_start(struct ccw_device *cdev)
 {
+       /* After 60s disbanding is considered to have failed. */
+       ccw_device_set_timeout(cdev, 60*HZ);
+
        cdev->private->flags.pgid_single = 0;
        cdev->private->iretry = 5;
        cdev->private->imask = 0x80;