proc_pid_readdir(): stop wanking with proc_fill_cache() for /proc/self
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 15 Jun 2013 06:45:10 +0000 (10:45 +0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 29 Jun 2013 08:57:17 +0000 (12:57 +0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/proc/base.c

index 306419c1968171fab55b384f72973ad6f86b6f06..40d515db91c99bbae1b582364e5e1396aa08691b 100644 (file)
@@ -2882,21 +2882,21 @@ retry:
 int proc_pid_readdir(struct file *file, struct dir_context *ctx)
 {
        struct tgid_iter iter;
-       struct pid_namespace *ns;
+       struct pid_namespace *ns = file->f_dentry->d_sb->s_fs_info;
        loff_t pos = ctx->pos;
 
        if (pos >= PID_MAX_LIMIT + TGID_OFFSET)
                return 0;
 
        if (pos == TGID_OFFSET - 1) {
-               if (!proc_fill_cache(file, ctx, "self", 4, NULL, NULL, NULL))
+               struct inode *inode = ns->proc_self->d_inode;
+               if (!dir_emit(ctx, "self", 4, inode->i_ino, DT_LNK))
                        return 0;
                iter.tgid = 0;
        } else {
                iter.tgid = pos - TGID_OFFSET;
        }
        iter.task = NULL;
-       ns = file->f_dentry->d_sb->s_fs_info;
        for (iter = next_tgid(ns, iter);
             iter.task;
             iter.tgid += 1, iter = next_tgid(ns, iter)) {