Presently the size of /proc/kcore which can be read by 'ls -l' is 0.  But
it's not the correct value.
On x86-64, ls -l shows
 ... root root 
140737486266368 2009-09-17 10:29 /proc/kcore
Then, 
7FFFFFFE02000. This comes from vmalloc area's size.
(*) This shows "core" size, not  memory size.
This patch shows the size by updating "size" field in struct
proc_dir_entry.  Later, lookup routine will create inode and fill
inode->i_size based on this value.  Then, this has a problem.
 - Once inode is cached, inode->i_size will never be updated.
Then, this patch is not memory-hotplug-aware.
To update inode->i_size, we have to know dentry or inode.
But there is no way to lookup them by inside kernel. Hmmm....
Next patch will try it.
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: WANG Cong <xiyou.wangcong@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
 
  */
 static void __kcore_update_ram(struct list_head *list)
 {
+       int nphdr;
+       size_t size;
        struct kcore_list *tmp, *pos;
        LIST_HEAD(garbage);
 
        } else
                list_splice(list, &garbage);
        kcore_need_update = 0;
+       proc_root_kcore->size = get_kcore_size(&nphdr, &size);
        write_unlock(&kclist_lock);
 
        free_kclist_ents(&garbage);
        unsigned long start;
 
        read_lock(&kclist_lock);
-       proc_root_kcore->size = size = get_kcore_size(&nphdr, &elf_buflen);
+       size = get_kcore_size(&nphdr, &elf_buflen);
+
        if (buflen == 0 || *fpos >= size) {
                read_unlock(&kclist_lock);
                return 0;