]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/media/dvb/dvb-core/dmxdev.c
[PATCH] remove many unneeded #includes of sched.h
[net-next-2.6.git] / drivers / media / dvb / dvb-core / dmxdev.c
index 09e96e9ddbdfc5a093af5315d8ef83cdbe9d5075..fc77de45ca4dc415fdaa77634eda086a2e78945e 100644 (file)
@@ -25,7 +25,6 @@
 #include <linux/vmalloc.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
-#include <linux/sched.h>
 #include <linux/poll.h>
 #include <linux/ioctl.h>
 #include <linux/wait.h>
@@ -141,12 +140,18 @@ static int dvb_dvr_open(struct inode *inode, struct file *file)
        }
 
        if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
-               void *mem = vmalloc(DVR_BUFFER_SIZE);
+               void *mem;
+               if (!dvbdev->readers) {
+                       mutex_unlock(&dmxdev->mutex);
+                       return -EBUSY;
+               }
+               mem = vmalloc(DVR_BUFFER_SIZE);
                if (!mem) {
                        mutex_unlock(&dmxdev->mutex);
                        return -ENOMEM;
                }
                dvb_ringbuffer_init(&dmxdev->dvr_buffer, mem, DVR_BUFFER_SIZE);
+               dvbdev->readers--;
        }
 
        if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
@@ -184,6 +189,7 @@ static int dvb_dvr_release(struct inode *inode, struct file *file)
                                                dmxdev->dvr_orig_fe);
        }
        if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
+               dvbdev->readers++;
                if (dmxdev->dvr_buffer.data) {
                        void *mem = dmxdev->dvr_buffer.data;
                        mb();
@@ -865,9 +871,6 @@ static int dvb_demux_do_ioctl(struct inode *inode, struct file *file,
                mutex_unlock(&dmxdevfilter->mutex);
                break;
 
-       case DMX_GET_EVENT:
-               break;
-
        case DMX_GET_PES_PIDS:
                if (!dmxdev->demux->get_pes_pids) {
                        ret = -EINVAL;
@@ -1029,8 +1032,7 @@ static struct file_operations dvb_dvr_fops = {
 
 static struct dvb_device dvbdev_dvr = {
        .priv = NULL,
-       .users = 1,
-       .writers = 1,
+       .readers = 1,
        .fops = &dvb_dvr_fops
 };