[patch] dvb_net hotplugging support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This patch addresses the discussion between Trent and me back then [1] 
in april.
It improves dvb_net hotplugging support, even though it might still 
require some more improvements.
This patch hasn't been tested yet, it would be nice if someone could 
test it and give some more feedback on it.

[1] http://lkml.org/lkml/2007/4/27/507

http://mcentral.de/~mrec/patches/dvb_net_fixes.diff

Signed-off-by: Markus Rechberger <markus.rechberger@xxxxxxx>

diff -r cae47793b091 linux/drivers/media/dvb/dvb-core/dvb_net.c
--- a/linux/drivers/media/dvb/dvb-core/dvb_net.c        Tue Aug 07 
10:52:55 2007 -0300
+++ b/linux/drivers/media/dvb/dvb-core/dvb_net.c        Thu Aug 09 
16:00:40 2007 +0200
@@ -1501,10 +1501,12 @@ static int dvb_net_close(struct inode *i
 static int dvb_net_close(struct inode *inode, struct file *file)
 {
        struct dvb_device *dvbdev = file->private_data;
-       struct dvb_net *dvbnet = dvbdev->priv;
+       struct dvb_net *dvbnet;

        if (!dvbdev)
                return -ENODEV;
+
+       dvbnet = dvbdev->priv;

        if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
                dvbdev->readers++;
@@ -1522,11 +1524,40 @@ static int dvb_net_close(struct inode *i
        return 0;
 }

+static int dvb_net_open_node(struct inode *inode, struct file *file)
+{
+       struct dvb_device *dvbdev = file->private_data;
+       struct dvb_net *dvbnet;
+
+       if (!dvbdev)
+               return -ENODEV;
+
+       dvbnet = dvbdev->priv;
+      
+       if (dvbnet->exit)
+               return -ENODEV;
+      
+       if (!dvbdev->users)
+               return -EBUSY;
+
+       if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
+               if (!dvbdev->readers)
+                       return -EBUSY;
+               dvbdev->readers--;
+       } else {
+               if (!dvbdev->writers)
+                       return -EBUSY;
+               dvbdev->writers--;
+       }
+
+       dvbdev->users--;
+       return 0;
+}

 static struct file_operations dvb_net_fops = {
        .owner = THIS_MODULE,
        .ioctl = dvb_net_ioctl,
-       .open = dvb_generic_open,
+       .open = dvb_net_open_node,
        .release = dvb_net_close,
 };




_______________________________________________
linux-dvb mailing list
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux