Эх сурвалжийг харах

[S390] cio: fix double unregistering of subchannels

In some cases where the channel subsystem decides to drop a subchannel
device device_unregister may be called twice, which results in an oops.
The patch prevents this by only unregistering registered devices.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Sebastian Ott 17 жил өмнө
parent
commit
ef60cd13ec

+ 2 - 1
drivers/s390/cio/css.c

@@ -164,7 +164,8 @@ static int css_sch_device_register(struct subchannel *sch)
 void css_sch_device_unregister(struct subchannel *sch)
 void css_sch_device_unregister(struct subchannel *sch)
 {
 {
 	mutex_lock(&sch->reg_mutex);
 	mutex_lock(&sch->reg_mutex);
-	device_unregister(&sch->dev);
+	if (device_is_registered(&sch->dev))
+		device_unregister(&sch->dev);
 	mutex_unlock(&sch->reg_mutex);
 	mutex_unlock(&sch->reg_mutex);
 }
 }
 EXPORT_SYMBOL_GPL(css_sch_device_unregister);
 EXPORT_SYMBOL_GPL(css_sch_device_unregister);