Re: get_user_pages() and shared memory question
From: Timur Tabi
Date: Tue Jun 21 2005 - 13:23:45 EST
Hugh Dickins wrote:
It depends on what you mean by allocate and deallocate. If the second
process is attaching the same shared memory segment as the first process
had attached, then yes, its buffer will contain those very pages which
the driver erroneously failed to release.
No, I'm talking about when the first process completely destroys the shared memory segment
so that it no longer exists. No processes are attached to it, and any attempt to attach
to it results in an error, because it doesn't exist.
In this case, when a process creates a new memory segment, I just want to know whether the
pages with a non-zero refcount (because of the get_user_pages() call) can ever be used in
a new shared memory segment.
I'm assuming the answer is no, because that would defeat the purpose of refcount (right?).
I've been looking at the code and reading books on the VM, but I get lost easily. It
appears that the function which allocates a page is shmem_alloc_page(), which calls
alloc_page() to do the actual work. If that's correct, is it possible for alloc_page() to
return a page that has been previously "claimed" by get_user_pages()? I'm looking at
__alloc_pages(), and I don't see any calls to page_count(), so I guess there's some other
mechanism (either in get_user_pages() or in the way the VM works) that prevents this
possibility. However, I'm getting dangerously close to my limit of understanding the
Linux VM.
Thanks for replying to my message. I really appreciate the help in understanding the
Linux VM.
--
Timur Tabi
Staff Software Engineer
timur.tabi@xxxxxxxxxxx
One thing a Southern boy will never say is,
"I don't think duct tape will fix it."
-- Ed Smylie, NASA engineer for Apollo 13
-
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/