diff options
author | Zhang Rui <rui.zhang@intel.com> | 2008-02-08 07:18:29 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-08 12:22:23 -0500 |
commit | 94413d8807a3c511a3675be4ce27a4d16d6408ee (patch) | |
tree | d20800024bdfe15d4f6ae1e7cc63a537127afab4 | |
parent | fd2cbe48883a01f710c2a639877e3b3e4eba6e59 (diff) |
proc: detect duplicate names on registration
Print a warning if PDE is registered with a name which already exists in
target directory.
Bug report and a simple fix can be found here:
http://bugzilla.kernel.org/show_bug.cgi?id=8798
[\n fixlet and no undescriptive variable usage --adobriyan]
[akpm@linux-foundation.org: make printk comprehensible]
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Alexey Dobriyan <adobriyan@sw.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | fs/proc/generic.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/proc/generic.c b/fs/proc/generic.c index e37ea3e53de8..b9dd3628d43a 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c | |||
@@ -521,6 +521,7 @@ static const struct inode_operations proc_dir_inode_operations = { | |||
521 | static int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp) | 521 | static int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp) |
522 | { | 522 | { |
523 | unsigned int i; | 523 | unsigned int i; |
524 | struct proc_dir_entry *tmp; | ||
524 | 525 | ||
525 | i = get_inode_number(); | 526 | i = get_inode_number(); |
526 | if (i == 0) | 527 | if (i == 0) |
@@ -544,6 +545,15 @@ static int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp | |||
544 | } | 545 | } |
545 | 546 | ||
546 | spin_lock(&proc_subdir_lock); | 547 | spin_lock(&proc_subdir_lock); |
548 | |||
549 | for (tmp = dir->subdir; tmp; tmp = tmp->next) | ||
550 | if (strcmp(tmp->name, dp->name) == 0) { | ||
551 | printk(KERN_WARNING "proc_dir_entry '%s' already " | ||
552 | "registered\n", dp->name); | ||
553 | dump_stack(); | ||
554 | break; | ||
555 | } | ||
556 | |||
547 | dp->next = dir->subdir; | 557 | dp->next = dir->subdir; |
548 | dp->parent = dir; | 558 | dp->parent = dir; |
549 | dir->subdir = dp; | 559 | dir->subdir = dp; |