Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[powerpc.git] / drivers / input / joydev.c
index 09b8223..06f0541 100644 (file)
@@ -24,7 +24,6 @@
 #include <linux/module.h>
 #include <linux/poll.h>
 #include <linux/init.h>
-#include <linux/smp_lock.h>
 #include <linux/device.h>
 
 MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
@@ -170,6 +169,7 @@ static int joydev_open(struct inode *inode, struct file *file)
        struct joydev_client *client;
        struct joydev *joydev;
        int i = iminor(inode) - JOYDEV_MINOR_BASE;
+       int error;
 
        if (i >= JOYDEV_MINORS)
                return -ENODEV;
@@ -185,8 +185,14 @@ static int joydev_open(struct inode *inode, struct file *file)
        client->joydev = joydev;
        list_add_tail(&client->node, &joydev->client_list);
 
-       if (!joydev->open++ && joydev->exist)
-               input_open_device(&joydev->handle);
+       if (!joydev->open++ && joydev->exist) {
+               error = input_open_device(&joydev->handle);
+               if (error) {
+                       list_del(&client->node);
+                       kfree(client);
+                       return error;
+               }
+       }
 
        file->private_data = client;
        return 0;
@@ -553,7 +559,7 @@ static int joydev_connect(struct input_handler *handler, struct input_dev *dev,
        }
 
        /* temporary symlink to keep userspace happy */
-       error = sysfs_create_link(&input_class.subsys.kset.kobj,
+       error = sysfs_create_link(&input_class.subsys.kobj,
                                  &cdev->kobj, joydev->name);
        if (error)
                goto err_cdev_destroy;
@@ -565,7 +571,7 @@ static int joydev_connect(struct input_handler *handler, struct input_dev *dev,
        return 0;
 
  err_remove_link:
-       sysfs_remove_link(&input_class.subsys.kset.kobj, joydev->name);
+       sysfs_remove_link(&input_class.subsys.kobj, joydev->name);
  err_cdev_destroy:
        class_device_destroy(&input_class, devt);
  err_free_joydev:
@@ -582,7 +588,7 @@ static void joydev_disconnect(struct input_handle *handle)
 
        input_unregister_handle(handle);
 
-       sysfs_remove_link(&input_class.subsys.kset.kobj, joydev->name);
+       sysfs_remove_link(&input_class.subsys.kobj, joydev->name);
        class_device_destroy(&input_class, MKDEV(INPUT_MAJOR, JOYDEV_MINOR_BASE + joydev->minor));
        joydev->exist = 0;