diff options
Diffstat (limited to 'fs/proc/inode.c')
| -rw-r--r-- | fs/proc/inode.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 176ce4cda68..d6a7ca1fdac 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | static void proc_evict_inode(struct inode *inode) | 27 | static void proc_evict_inode(struct inode *inode) |
| 28 | { | 28 | { |
| 29 | struct proc_dir_entry *de; | 29 | struct proc_dir_entry *de; |
| 30 | struct ctl_table_header *head; | ||
| 30 | 31 | ||
| 31 | truncate_inode_pages(&inode->i_data, 0); | 32 | truncate_inode_pages(&inode->i_data, 0); |
| 32 | end_writeback(inode); | 33 | end_writeback(inode); |
| @@ -38,8 +39,11 @@ static void proc_evict_inode(struct inode *inode) | |||
| 38 | de = PROC_I(inode)->pde; | 39 | de = PROC_I(inode)->pde; |
| 39 | if (de) | 40 | if (de) |
| 40 | pde_put(de); | 41 | pde_put(de); |
| 41 | if (PROC_I(inode)->sysctl) | 42 | head = PROC_I(inode)->sysctl; |
| 42 | sysctl_head_put(PROC_I(inode)->sysctl); | 43 | if (head) { |
| 44 | rcu_assign_pointer(PROC_I(inode)->sysctl, NULL); | ||
| 45 | sysctl_head_put(head); | ||
| 46 | } | ||
| 43 | } | 47 | } |
| 44 | 48 | ||
| 45 | struct vfsmount *proc_mnt; | 49 | struct vfsmount *proc_mnt; |
