V4L/DVB (11392): patch: s2255drv driver removal problem fixed
authorDean Anderson <dean@sensoray.com>
Mon, 30 Mar 2009 14:59:56 +0000 (11:59 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 7 Apr 2009 00:44:31 +0000 (21:44 -0300)
This patch fixes kfree problem on driver removal, fixes streamoff problem
and removes unnecessary videobuf_waiton from free_buffer function.

Signed-off-by: Dean Anderson <dean@sensoray.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/s2255drv.c

index b5be633..5202cad 100644 (file)
@@ -722,7 +722,6 @@ static void free_buffer(struct videobuf_queue *vq, struct s2255_buffer *buf)
 {
        dprintk(4, "%s\n", __func__);
 
-       videobuf_waiton(&buf->vb, 0, 0);
        videobuf_vmalloc_free(&buf->vb);
        buf->vb.state = VIDEOBUF_NEEDS_INIT;
 }
@@ -1324,7 +1323,6 @@ static int vidioc_streamon(struct file *file, void *priv, enum v4l2_buf_type i)
 
 static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
 {
-       int res;
        struct s2255_fh *fh = priv;
        struct s2255_dev *dev = fh->dev;
 
@@ -1338,9 +1336,7 @@ static int vidioc_streamoff(struct file *file, void *priv, enum v4l2_buf_type i)
                return -EINVAL;
        }
        s2255_stop_acquire(dev, fh->channel);
-       res = videobuf_streamoff(&fh->vb_vidq);
-       if (res < 0)
-               return res;
+       videobuf_streamoff(&fh->vb_vidq);
        res_free(dev, fh);
        return 0;
 }
@@ -1707,13 +1703,13 @@ static void s2255_destroy(struct kref *kref)
        kfree(dev->fw_data);
        usb_put_dev(dev->udev);
        dprintk(1, "%s", __func__);
-       kfree(dev);
 
        while (!list_empty(&s2255_devlist)) {
                list = s2255_devlist.next;
                list_del(list);
        }
        mutex_unlock(&dev->open_lock);
+       kfree(dev);
 }
 
 static int s2255_close(struct file *file)