Messages in this thread | | | Subject | Re: [PATCH 8/8] fix handling of st_nlink on procfs root | From | (Eric W. Biederman) | Date | Wed, 15 Feb 2006 02:20:17 -0700 |
| |
Al Viro <viro@ftp.linux.org.uk> writes:
> Date: 1139427460 -0500 > > 1) it should use nr_processes(), not nr_threads; otherwise we are getting > very confused find(1) and friends, among other things. > 2) better do that at stat() time than at every damn lookup in procfs root. > > Patch had been sitting in FC4 kernels for many months now...
And it is actually wrong. It fails to take into account the static /proc entries.
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
> diff --git a/fs/proc/root.c b/fs/proc/root.c > index 6889628..c3fd361 100644 > --- a/fs/proc/root.c > +++ b/fs/proc/root.c > @@ -80,16 +80,16 @@ void __init proc_root_init(void) > proc_bus = proc_mkdir("bus", NULL); > } > > -static struct dentry *proc_root_lookup(struct inode * dir, struct dentry * > dentry, struct nameidata *nd) > +static int proc_root_getattr(struct vfsmount *mnt, struct dentry *dentry, > struct kstat *stat > +) > { > - /* > - * nr_threads is actually protected by the tasklist_lock; > - * however, it's conventional to do reads, especially for > - * reporting, without any locking whatsoever. > - */ > - if (dir->i_ino == PROC_ROOT_INO) /* check for safety... */ > - dir->i_nlink = proc_root.nlink + nr_threads; > + generic_fillattr(dentry->d_inode, stat); > + stat->nlink = proc_root.nlink + nr_processes(); > + return 0; > +}
proc_root_getattr should look more like below. Notice the addition of de->nlink, which accounts for the static entries as well.
static int proc_root_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat) { struct inode *inode = dentry->d_inode; struct proc_dir_entry *de = PDE(inode); generic_fillattr(inode, stat);
if (de && de->nlink) inode->i_nlink = de->nlink;
/* Get the proper hardlink count */ stat->nlink += nr_processes(); return 0;
} - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |