Explorar o código

[S390] dasd: fix reference counting in display method for proc/dasd/devices

Using the /proc/dasd/devices interface leaves the reference counter
of alias devices in an inconsistent state. A process that tries to set
such a device offline afterwards will hang.
The dasd_devices_show function returns immediately for alias devices
and this code path was missing a dasd_put_device call.

Signed-off-by: Stefan Weinhuber <wein@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Stefan Weinhuber %!s(int64=17) %!d(string=hai) anos
pai
achega
a5e2383991
Modificáronse 1 ficheiros con 3 adicións e 1 borrados
  1. 3 1
      drivers/s390/block/dasd_proc.c

+ 3 - 1
drivers/s390/block/dasd_proc.c

@@ -62,8 +62,10 @@ dasd_devices_show(struct seq_file *m, void *v)
 		return 0;
 	if (device->block)
 		block = device->block;
-	else
+	else {
+		dasd_put_device(device);
 		return 0;
+	}
 	/* Print device number. */
 	seq_printf(m, "%s", device->cdev->dev.bus_id);
 	/* Print discipline string. */