diff options
| -rw-r--r-- | fs/proc/generic.c | 21 | ||||
| -rw-r--r-- | fs/proc/inode.c | 10 |
2 files changed, 10 insertions, 21 deletions
diff --git a/fs/proc/generic.c b/fs/proc/generic.c index 7dfe548a28e8..2983dc52ca25 100644 --- a/fs/proc/generic.c +++ b/fs/proc/generic.c | |||
| @@ -412,8 +412,7 @@ static const struct dentry_operations proc_dentry_operations = | |||
| 412 | struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir, | 412 | struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir, |
| 413 | struct dentry *dentry) | 413 | struct dentry *dentry) |
| 414 | { | 414 | { |
| 415 | struct inode *inode = NULL; | 415 | struct inode *inode; |
| 416 | int error = -ENOENT; | ||
| 417 | 416 | ||
| 418 | spin_lock(&proc_subdir_lock); | 417 | spin_lock(&proc_subdir_lock); |
| 419 | for (de = de->subdir; de ; de = de->next) { | 418 | for (de = de->subdir; de ; de = de->next) { |
| @@ -422,22 +421,16 @@ struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir, | |||
| 422 | if (!memcmp(dentry->d_name.name, de->name, de->namelen)) { | 421 | if (!memcmp(dentry->d_name.name, de->name, de->namelen)) { |
| 423 | pde_get(de); | 422 | pde_get(de); |
| 424 | spin_unlock(&proc_subdir_lock); | 423 | spin_unlock(&proc_subdir_lock); |
| 425 | error = -ENOMEM; | ||
| 426 | inode = proc_get_inode(dir->i_sb, de); | 424 | inode = proc_get_inode(dir->i_sb, de); |
| 427 | goto out_unlock; | 425 | if (!inode) |
| 426 | return ERR_PTR(-ENOMEM); | ||
| 427 | d_set_d_op(dentry, &proc_dentry_operations); | ||
| 428 | d_add(dentry, inode); | ||
| 429 | return NULL; | ||
| 428 | } | 430 | } |
| 429 | } | 431 | } |
| 430 | spin_unlock(&proc_subdir_lock); | 432 | spin_unlock(&proc_subdir_lock); |
| 431 | out_unlock: | 433 | return ERR_PTR(-ENOENT); |
| 432 | |||
| 433 | if (inode) { | ||
| 434 | d_set_d_op(dentry, &proc_dentry_operations); | ||
| 435 | d_add(dentry, inode); | ||
| 436 | return NULL; | ||
| 437 | } | ||
| 438 | if (de) | ||
| 439 | pde_put(de); | ||
| 440 | return ERR_PTR(error); | ||
| 441 | } | 434 | } |
| 442 | 435 | ||
| 443 | struct dentry *proc_lookup(struct inode *dir, struct dentry *dentry, | 436 | struct dentry *proc_lookup(struct inode *dir, struct dentry *dentry, |
diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 98a7d2870bef..70322e1a4f0f 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c | |||
| @@ -445,12 +445,9 @@ static const struct file_operations proc_reg_file_ops_no_compat = { | |||
| 445 | 445 | ||
| 446 | struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) | 446 | struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) |
| 447 | { | 447 | { |
| 448 | struct inode * inode; | 448 | struct inode *inode = iget_locked(sb, de->low_ino); |
| 449 | 449 | ||
| 450 | inode = iget_locked(sb, de->low_ino); | 450 | if (inode && (inode->i_state & I_NEW)) { |
| 451 | if (!inode) | ||
| 452 | return NULL; | ||
| 453 | if (inode->i_state & I_NEW) { | ||
| 454 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; | 451 | inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; |
| 455 | PROC_I(inode)->pde = de; | 452 | PROC_I(inode)->pde = de; |
| 456 | 453 | ||
| @@ -482,7 +479,7 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de) | |||
| 482 | } else | 479 | } else |
| 483 | pde_put(de); | 480 | pde_put(de); |
| 484 | return inode; | 481 | return inode; |
| 485 | } | 482 | } |
| 486 | 483 | ||
| 487 | int proc_fill_super(struct super_block *s) | 484 | int proc_fill_super(struct super_block *s) |
| 488 | { | 485 | { |
| @@ -499,7 +496,6 @@ int proc_fill_super(struct super_block *s) | |||
| 499 | root_inode = proc_get_inode(s, &proc_root); | 496 | root_inode = proc_get_inode(s, &proc_root); |
| 500 | if (!root_inode) { | 497 | if (!root_inode) { |
| 501 | printk(KERN_ERR "proc_fill_super: get root inode failed\n"); | 498 | printk(KERN_ERR "proc_fill_super: get root inode failed\n"); |
| 502 | pde_put(&proc_root); | ||
| 503 | return -ENOMEM; | 499 | return -ENOMEM; |
| 504 | } | 500 | } |
| 505 | 501 | ||
