diff options
Diffstat (limited to 'fs/char_dev.c')
-rw-r--r-- | fs/char_dev.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/fs/char_dev.c b/fs/char_dev.c index 38f71222a552..a173551e19d7 100644 --- a/fs/char_dev.c +++ b/fs/char_dev.c | |||
@@ -13,7 +13,6 @@ | |||
13 | #include <linux/major.h> | 13 | #include <linux/major.h> |
14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/smp_lock.h> | ||
17 | #include <linux/seq_file.h> | 16 | #include <linux/seq_file.h> |
18 | 17 | ||
19 | #include <linux/kobject.h> | 18 | #include <linux/kobject.h> |
@@ -375,7 +374,6 @@ static int chrdev_open(struct inode *inode, struct file *filp) | |||
375 | p = inode->i_cdev; | 374 | p = inode->i_cdev; |
376 | if (!p) { | 375 | if (!p) { |
377 | inode->i_cdev = p = new; | 376 | inode->i_cdev = p = new; |
378 | inode->i_cindex = idx; | ||
379 | list_add(&inode->i_devices, &p->list); | 377 | list_add(&inode->i_devices, &p->list); |
380 | new = NULL; | 378 | new = NULL; |
381 | } else if (!cdev_get(p)) | 379 | } else if (!cdev_get(p)) |
@@ -405,6 +403,18 @@ static int chrdev_open(struct inode *inode, struct file *filp) | |||
405 | return ret; | 403 | return ret; |
406 | } | 404 | } |
407 | 405 | ||
406 | int cdev_index(struct inode *inode) | ||
407 | { | ||
408 | int idx; | ||
409 | struct kobject *kobj; | ||
410 | |||
411 | kobj = kobj_lookup(cdev_map, inode->i_rdev, &idx); | ||
412 | if (!kobj) | ||
413 | return -1; | ||
414 | kobject_put(kobj); | ||
415 | return idx; | ||
416 | } | ||
417 | |||
408 | void cd_forget(struct inode *inode) | 418 | void cd_forget(struct inode *inode) |
409 | { | 419 | { |
410 | spin_lock(&cdev_lock); | 420 | spin_lock(&cdev_lock); |
@@ -557,6 +567,7 @@ EXPORT_SYMBOL(cdev_init); | |||
557 | EXPORT_SYMBOL(cdev_alloc); | 567 | EXPORT_SYMBOL(cdev_alloc); |
558 | EXPORT_SYMBOL(cdev_del); | 568 | EXPORT_SYMBOL(cdev_del); |
559 | EXPORT_SYMBOL(cdev_add); | 569 | EXPORT_SYMBOL(cdev_add); |
570 | EXPORT_SYMBOL(cdev_index); | ||
560 | EXPORT_SYMBOL(register_chrdev); | 571 | EXPORT_SYMBOL(register_chrdev); |
561 | EXPORT_SYMBOL(unregister_chrdev); | 572 | EXPORT_SYMBOL(unregister_chrdev); |
562 | EXPORT_SYMBOL(directly_mappable_cdev_bdi); | 573 | EXPORT_SYMBOL(directly_mappable_cdev_bdi); |