X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=drivers%2Fs390%2Fcio%2Fdevice.c;h=e8391b89eff4bbbcb41896b3232c05a4070d8917;hb=16d2ce271c6b8b3527ed1461d03b5f373d53f78f;hp=2ff8a22d42574242eb0a07c1ab1d38f73cc81d6b;hpb=3b210e7652a0ac638b1a267b6a181c8f742d8462;p=deliverable%2Flinux.git diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index 2ff8a22d4257..e8391b89eff4 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c @@ -1455,7 +1455,16 @@ static int io_subchannel_sch_event(struct subchannel *sch, int process) break; case IO_SCH_UNREG_ATTACH: case IO_SCH_UNREG: - if (cdev) + if (!cdev) + break; + if (cdev->private->state == DEV_STATE_SENSE_ID) { + /* + * Note: delayed work triggered by this event + * and repeated calls to sch_event are synchronized + * by the above check for work_pending(cdev). + */ + dev_fsm_event(cdev, DEV_EVENT_NOTOPER); + } else ccw_device_set_notoper(cdev); break; case IO_SCH_NOP: