diff options
| -rw-r--r-- | fs/proc/inode.c | 4 | ||||
| -rw-r--r-- | fs/proc/root.c | 17 |
2 files changed, 9 insertions, 12 deletions
diff --git a/fs/proc/inode.c b/fs/proc/inode.c index 6573f31f1fd9..075d3e945602 100644 --- a/fs/proc/inode.c +++ b/fs/proc/inode.c | |||
| @@ -204,10 +204,6 @@ int proc_fill_super(struct super_block *s, void *data, int silent) | |||
| 204 | root_inode = proc_get_inode(s, PROC_ROOT_INO, &proc_root); | 204 | root_inode = proc_get_inode(s, PROC_ROOT_INO, &proc_root); |
| 205 | if (!root_inode) | 205 | if (!root_inode) |
| 206 | goto out_no_root; | 206 | goto out_no_root; |
| 207 | /* | ||
| 208 | * Fixup the root inode's nlink value | ||
| 209 | */ | ||
| 210 | root_inode->i_nlink += nr_processes(); | ||
| 211 | root_inode->i_uid = 0; | 207 | root_inode->i_uid = 0; |
| 212 | root_inode->i_gid = 0; | 208 | root_inode->i_gid = 0; |
| 213 | s->s_root = d_alloc_root(root_inode); | 209 | s->s_root = d_alloc_root(root_inode); |
diff --git a/fs/proc/root.c b/fs/proc/root.c index 68896283c8ae..c3fd3611112f 100644 --- a/fs/proc/root.c +++ b/fs/proc/root.c | |||
| @@ -80,16 +80,16 @@ void __init proc_root_init(void) | |||
| 80 | proc_bus = proc_mkdir("bus", NULL); | 80 | proc_bus = proc_mkdir("bus", NULL); |
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | static struct dentry *proc_root_lookup(struct inode * dir, struct dentry * dentry, struct nameidata *nd) | 83 | static int proc_root_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat |
| 84 | ) | ||
| 84 | { | 85 | { |
| 85 | /* | 86 | generic_fillattr(dentry->d_inode, stat); |
| 86 | * nr_threads is actually protected by the tasklist_lock; | 87 | stat->nlink = proc_root.nlink + nr_processes(); |
| 87 | * however, it's conventional to do reads, especially for | 88 | return 0; |
| 88 | * reporting, without any locking whatsoever. | 89 | } |
| 89 | */ | ||
| 90 | if (dir->i_ino == PROC_ROOT_INO) /* check for safety... */ | ||
| 91 | dir->i_nlink = proc_root.nlink + nr_threads; | ||
| 92 | 90 | ||
| 91 | static struct dentry *proc_root_lookup(struct inode * dir, struct dentry * dentry, struct nameidata *nd) | ||
| 92 | { | ||
| 93 | if (!proc_lookup(dir, dentry, nd)) { | 93 | if (!proc_lookup(dir, dentry, nd)) { |
| 94 | return NULL; | 94 | return NULL; |
| 95 | } | 95 | } |
| @@ -134,6 +134,7 @@ static struct file_operations proc_root_operations = { | |||
| 134 | */ | 134 | */ |
| 135 | static struct inode_operations proc_root_inode_operations = { | 135 | static struct inode_operations proc_root_inode_operations = { |
| 136 | .lookup = proc_root_lookup, | 136 | .lookup = proc_root_lookup, |
| 137 | .getattr = proc_root_getattr, | ||
| 137 | }; | 138 | }; |
| 138 | 139 | ||
| 139 | /* | 140 | /* |
