drivers: dio: fix possible memory leak in dio_init()
[linux-2.6-block.git] / drivers / dio / dio.c
index 0e5a5662d5a40c21d1aa2c9e38eb200af70324e1..0a051d65688002cce5f80b52a9d3c6feaba0a644 100644 (file)
@@ -109,6 +109,12 @@ static char dio_no_name[] = { 0 };
 
 #endif /* CONFIG_DIO_CONSTANTS */
 
+static void dio_dev_release(struct device *dev)
+{
+       struct dio_dev *ddev = container_of(dev, typeof(struct dio_dev), dev);
+       kfree(ddev);
+}
+
 int __init dio_find(int deviceid)
 {
        /* Called to find a DIO device before the full bus scan has run.
@@ -225,6 +231,7 @@ static int __init dio_init(void)
                dev->bus = &dio_bus;
                dev->dev.parent = &dio_bus.dev;
                dev->dev.bus = &dio_bus_type;
+               dev->dev.release = dio_dev_release;
                dev->scode = scode;
                dev->resource.start = pa;
                dev->resource.end = pa + DIO_SIZE(scode, va);
@@ -252,6 +259,7 @@ static int __init dio_init(void)
                if (error) {
                        pr_err("DIO: Error registering device %s\n",
                               dev->name);
+                       put_device(&dev->dev);
                        continue;
                }
                error = dio_create_sysfs_dev_files(dev);