提交 db963164 编写于 作者: A Al Viro

proc_pid_readdir(): stop wanking with proc_fill_cache() for /proc/self

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 147ce699
...@@ -2882,21 +2882,21 @@ static struct tgid_iter next_tgid(struct pid_namespace *ns, struct tgid_iter ite ...@@ -2882,21 +2882,21 @@ static struct tgid_iter next_tgid(struct pid_namespace *ns, struct tgid_iter ite
int proc_pid_readdir(struct file *file, struct dir_context *ctx) int proc_pid_readdir(struct file *file, struct dir_context *ctx)
{ {
struct tgid_iter iter; 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; loff_t pos = ctx->pos;
if (pos >= PID_MAX_LIMIT + TGID_OFFSET) if (pos >= PID_MAX_LIMIT + TGID_OFFSET)
return 0; return 0;
if (pos == TGID_OFFSET - 1) { 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; return 0;
iter.tgid = 0; iter.tgid = 0;
} else { } else {
iter.tgid = pos - TGID_OFFSET; iter.tgid = pos - TGID_OFFSET;
} }
iter.task = NULL; iter.task = NULL;
ns = file->f_dentry->d_sb->s_fs_info;
for (iter = next_tgid(ns, iter); for (iter = next_tgid(ns, iter);
iter.task; iter.task;
iter.tgid += 1, iter = next_tgid(ns, iter)) { iter.tgid += 1, iter = next_tgid(ns, iter)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册