Re: Does shmem_getpage==>shmem_alloc_page==>alloc_page_vma holdmmap_sem?

From: Hugh Dickins
Date: Sun Nov 06 2005 - 01:02:10 EST


On Sat, 5 Nov 2005, Paul Jackson wrote:
>
> The comment in mm/mempolicy.c for alloc_page_vma() states:
>
> Should be called with the mm_sem of the vma hold.
>
> However it seems that the call chain (#ifdef CONFIG_NUMA):
>
> shmem_getpage ==> shmem_alloc_page ==> alloc_page_vma
>
> where shmem_getpage() is called from many of the mm/shmem.c file
> operations, is called without holding mmap_sem. There is no
> mention of mmap_sem in the entire mm/shmem.c file.

It's safe but horrid. Look closer and you'll find there isn't even
an mm to hold the mmap_sem of. The struct vm_area_struct is on the
stack of shmem_alloc_page, and exists solely to apply mempolicy to
a shmem file via an interface designed for mempolicy on vmas.

So far as I know, it works fine; but that interface really ought
to be redesigned some time - it looks like a quick hack that stuck.

Hugh
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/