[S390] dasd: fix reference counting in display method for proc/dasd/devices
authorStefan Weinhuber <wein@de.ibm.com>
Wed, 5 Mar 2008 11:37:11 +0000 (12:37 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 5 Mar 2008 11:37:18 +0000 (12:37 +0100)
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>
drivers/s390/block/dasd_proc.c

index 28a86f070048b4a3a25719fb100546df9cd8ebd8..556063e8f7a91d1163450cc63d1cd9128e6a77b4 100644 (file)
@@ -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. */