X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fchar%2Fmisc.c;h=96eb2a709e21d66ca7772d75c83ca79d595c81bf;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=62ebe09656e3ad68b18992a0c0e4a8557c9f7992;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/drivers/char/misc.c b/drivers/char/misc.c index 62ebe0965..96eb2a709 100644 --- a/drivers/char/misc.c +++ b/drivers/char/misc.c @@ -34,6 +34,7 @@ */ #include +#include #include #include @@ -43,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -113,7 +115,7 @@ static int misc_seq_open(struct inode *inode, struct file *file) return seq_open(file, &misc_seq_ops); } -static const struct file_operations misc_proc_fops = { +static struct file_operations misc_proc_fops = { .owner = THIS_MODULE, .open = misc_seq_open, .read = seq_read, @@ -176,7 +178,7 @@ fail: */ static struct class *misc_class; -static const struct file_operations misc_fops = { +static struct file_operations misc_fops = { .owner = THIS_MODULE, .open = misc_open, }; @@ -202,7 +204,7 @@ int misc_register(struct miscdevice * misc) { struct miscdevice *c; dev_t dev; - int err = 0; + int err; down(&misc_sem); list_for_each_entry(c, &misc_list, list) { @@ -226,6 +228,10 @@ int misc_register(struct miscdevice * misc) if (misc->minor < DYNAMIC_MINORS) misc_minors[misc->minor >> 3] |= 1 << (misc->minor & 7); + if (misc->devfs_name[0] == '\0') { + snprintf(misc->devfs_name, sizeof(misc->devfs_name), + "misc/%s", misc->name); + } dev = MKDEV(MISC_MAJOR, misc->minor); misc->class = class_device_create(misc_class, NULL, dev, misc->dev, @@ -235,6 +241,13 @@ int misc_register(struct miscdevice * misc) goto out; } + err = devfs_mk_cdev(dev, S_IFCHR|S_IRUSR|S_IWUSR|S_IRGRP, + misc->devfs_name); + if (err) { + class_device_destroy(misc_class, dev); + goto out; + } + /* * Add it to the front, so that later devices can "override" * earlier defaults @@ -265,6 +278,7 @@ int misc_deregister(struct miscdevice * misc) down(&misc_sem); list_del(&misc->list); class_device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor)); + devfs_remove(misc->devfs_name); if (i < DYNAMIC_MINORS && i>0) { misc_minors[i>>3] &= ~(1 << (misc->minor & 7)); }