diff options
Diffstat (limited to 'fs/proc/generic.c')
-rw-r--r-- | fs/proc/generic.c | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/fs/proc/generic.c b/fs/proc/generic.c index 1bdb62435758..a9806bc21ec3 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c | |||
@@ -561,28 +561,33 @@ static int proc_register(struct proc_dir_entry * dir, struct proc_dir_entry * dp | |||
561 | static void proc_kill_inodes(struct proc_dir_entry *de) | 561 | static void proc_kill_inodes(struct proc_dir_entry *de) |
562 | { | 562 | { |
563 | struct list_head *p; | 563 | struct list_head *p; |
564 | struct super_block *sb = proc_mnt->mnt_sb; | 564 | struct super_block *sb; |
565 | 565 | ||
566 | /* | 566 | /* |
567 | * Actually it's a partial revoke(). | 567 | * Actually it's a partial revoke(). |
568 | */ | 568 | */ |
569 | file_list_lock(); | 569 | spin_lock(&sb_lock); |
570 | list_for_each(p, &sb->s_files) { | 570 | list_for_each_entry(sb, &proc_fs_type.fs_supers, s_instances) { |
571 | struct file * filp = list_entry(p, struct file, f_u.fu_list); | 571 | file_list_lock(); |
572 | struct dentry * dentry = filp->f_path.dentry; | 572 | list_for_each(p, &sb->s_files) { |
573 | struct inode * inode; | 573 | struct file *filp = list_entry(p, struct file, |
574 | const struct file_operations *fops; | 574 | f_u.fu_list); |
575 | 575 | struct dentry *dentry = filp->f_path.dentry; | |
576 | if (dentry->d_op != &proc_dentry_operations) | 576 | struct inode *inode; |
577 | continue; | 577 | const struct file_operations *fops; |
578 | inode = dentry->d_inode; | 578 | |
579 | if (PDE(inode) != de) | 579 | if (dentry->d_op != &proc_dentry_operations) |
580 | continue; | 580 | continue; |
581 | fops = filp->f_op; | 581 | inode = dentry->d_inode; |
582 | filp->f_op = NULL; | 582 | if (PDE(inode) != de) |
583 | fops_put(fops); | 583 | continue; |
584 | fops = filp->f_op; | ||
585 | filp->f_op = NULL; | ||
586 | fops_put(fops); | ||
587 | } | ||
588 | file_list_unlock(); | ||
584 | } | 589 | } |
585 | file_list_unlock(); | 590 | spin_unlock(&sb_lock); |
586 | } | 591 | } |
587 | 592 | ||
588 | static struct proc_dir_entry *proc_create(struct proc_dir_entry **parent, | 593 | static struct proc_dir_entry *proc_create(struct proc_dir_entry **parent, |