[media] lirc_dev: fix pointer to owner
authorJarod Wilson <jarod@redhat.com>
Sun, 17 Oct 2010 00:32:44 +0000 (21:32 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 22 Oct 2010 22:05:35 +0000 (20:05 -0200)
If an lirc device driver doesn't specify its own fops, we set set
ir->cdev.owner to THIS_MODULE. If it does specify its own fops, we
set ir->cdev.owner to ir->d.owner. Subsequent module_{get,put} calls
should be using ir->cdev.owner, not ir->d.owner.

Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/IR/lirc_dev.c

index 560c356..19a16ce 100644 (file)
@@ -397,7 +397,7 @@ int lirc_unregister_driver(int minor)
                wake_up_interruptible(&ir->buf->wait_poll);
                mutex_lock(&ir->irctl_lock);
                ir->d.set_use_dec(ir->d.data);
-               module_put(ir->d.owner);
+               module_put(ir->cdev.owner);
                mutex_unlock(&ir->irctl_lock);
                cdev_del(&ir->cdev);
        } else {
@@ -446,12 +446,12 @@ int lirc_dev_fop_open(struct inode *inode, struct file *file)
                goto error;
        }
 
-       if (try_module_get(ir->d.owner)) {
+       if (try_module_get(ir->cdev.owner)) {
                ++ir->open;
                retval = ir->d.set_use_inc(ir->d.data);
 
                if (retval) {
-                       module_put(ir->d.owner);
+                       module_put(ir->cdev.owner);
                        --ir->open;
                } else {
                        lirc_buffer_clear(ir->buf);
@@ -482,7 +482,7 @@ int lirc_dev_fop_close(struct inode *inode, struct file *file)
        --ir->open;
        if (ir->attached) {
                ir->d.set_use_dec(ir->d.data);
-               module_put(ir->d.owner);
+               module_put(ir->cdev.owner);
        } else {
                lirc_irctl_cleanup(ir);
                irctls[ir->d.minor] = NULL;