diff options
Diffstat (limited to 'drivers/s390/cio/device.c')
| -rw-r--r-- | drivers/s390/cio/device.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index ed25c8740a9..fc916f5d731 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c @@ -1426,6 +1426,8 @@ static enum io_sch_action sch_get_action(struct subchannel *sch)  		return IO_SCH_REPROBE;  	if (cdev->online)  		return IO_SCH_VERIFY; +	if (cdev->private->state == DEV_STATE_NOT_OPER) +		return IO_SCH_UNREG_ATTACH;  	return IO_SCH_NOP;  } @@ -1519,11 +1521,14 @@ static int io_subchannel_sch_event(struct subchannel *sch, int process)  			goto out;  		break;  	case IO_SCH_UNREG_ATTACH: +		spin_lock_irqsave(sch->lock, flags);  		if (cdev->private->flags.resuming) {  			/* Device will be handled later. */  			rc = 0; -			goto out; +			goto out_unlock;  		} +		sch_set_cdev(sch, NULL); +		spin_unlock_irqrestore(sch->lock, flags);  		/* Unregister ccw device. */  		ccw_device_unregister(cdev);  		break;  |