mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 12:44:11 +08:00
proc: less memory for /proc/*/map_files readdir
dentry name can be evaluated later, right before calling into VFS. Also, spend less time under ->mmap_sem. Link: http://lkml.kernel.org/r/20171110163034.GA2534@avx2 Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
593bc695a1
commit
20d28cde55
@ -2026,9 +2026,9 @@ out:
|
||||
}
|
||||
|
||||
struct map_files_info {
|
||||
unsigned long start;
|
||||
unsigned long end;
|
||||
fmode_t mode;
|
||||
unsigned int len;
|
||||
unsigned char name[4*sizeof(long)+2]; /* max: %lx-%lx\0 */
|
||||
};
|
||||
|
||||
/*
|
||||
@ -2198,10 +2198,9 @@ proc_map_files_readdir(struct file *file, struct dir_context *ctx)
|
||||
if (++pos <= ctx->pos)
|
||||
continue;
|
||||
|
||||
info.start = vma->vm_start;
|
||||
info.end = vma->vm_end;
|
||||
info.mode = vma->vm_file->f_mode;
|
||||
info.len = snprintf(info.name,
|
||||
sizeof(info.name), "%lx-%lx",
|
||||
vma->vm_start, vma->vm_end);
|
||||
if (flex_array_put(fa, i++, &info, GFP_KERNEL))
|
||||
BUG();
|
||||
}
|
||||
@ -2209,9 +2208,13 @@ proc_map_files_readdir(struct file *file, struct dir_context *ctx)
|
||||
up_read(&mm->mmap_sem);
|
||||
|
||||
for (i = 0; i < nr_files; i++) {
|
||||
char buf[4 * sizeof(long) + 2]; /* max: %lx-%lx\0 */
|
||||
unsigned int len;
|
||||
|
||||
p = flex_array_get(fa, i);
|
||||
len = snprintf(buf, sizeof(buf), "%lx-%lx", p->start, p->end);
|
||||
if (!proc_fill_cache(file, ctx,
|
||||
p->name, p->len,
|
||||
buf, len,
|
||||
proc_map_files_instantiate,
|
||||
task,
|
||||
(void *)(unsigned long)p->mode))
|
||||
|
Loading…
Reference in New Issue
Block a user