X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fproc%2Fproc_misc.c;h=ded96986296099a036af1400a1ecdd7f3f71c058;hb=d9089c296bdd82e6c1b7f82d04c11b5decde75e7;hp=b14f43d25e9eeb5705d9dbc484c839f855481132;hpb=c748e1340e0de3fa7fed86f8bdf499be9242afff;p=linux-2.6 diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c index b14f43d25e..ded9698629 100644 --- a/fs/proc/proc_misc.c +++ b/fs/proc/proc_misc.c @@ -464,14 +464,25 @@ static const struct file_operations proc_slabstats_operations = { #ifdef CONFIG_MMU static int vmalloc_open(struct inode *inode, struct file *file) { - return seq_open(file, &vmalloc_op); + unsigned int *ptr = NULL; + int ret; + + if (NUMA_BUILD) + ptr = kmalloc(nr_node_ids * sizeof(unsigned int), GFP_KERNEL); + ret = seq_open(file, &vmalloc_op); + if (!ret) { + struct seq_file *m = file->private_data; + m->private = ptr; + } else + kfree(ptr); + return ret; } static const struct file_operations proc_vmalloc_operations = { .open = vmalloc_open, .read = seq_read, .llseek = seq_lseek, - .release = seq_release, + .release = seq_release_private, }; #endif