diff options
| author | Steve French <sfrench@us.ibm.com> | 2007-11-25 04:53:27 -0500 | 
|---|---|---|
| committer | Steve French <sfrench@us.ibm.com> | 2007-11-25 04:53:27 -0500 | 
| commit | 058250a0d5886b4d96a195ecc7e3a75e2df5e4b1 (patch) | |
| tree | fb67e8f5258c6aa11d4e8c39650e23de7556b38d /fs/proc/generic.c | |
| parent | cea218054ad277d6c126890213afde07b4eb1602 (diff) | |
| parent | 2ffbb8377c7a0713baf6644e285adc27a5654582 (diff) | |
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
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, | 
