Re: expand_stack fix [was Re: 2.4.9aa3]

From: Linus Torvalds (torvalds@transmeta.com)
Date: Fri Sep 07 2001 - 13:47:09 EST


On Mon, 3 Sep 2001, Andrea Arcangeli wrote:
>
> Linus please include the attached patch to the next kernel, expand_stack
> is totally broken at the moment, we cannot mess with the mm vma layout
> if we don't hold the mmap_sem in write mode.

I disagree with the diagnosis..

expand_stack() has _never_ messed with the vma layout, and never should.
As such, from a vma list integrity standpoint it is fine.

Do we mess with the contents? Yes. But I'd much rather see a much more
minimal approach to the problem, on the order of:
 - make sure we only accept GROWSDOWN for anonymous areas (which don't
   care about the offset)
 - make the vm_start update atomic (possibly by just getting the pagetable
   spinlock).

> I considered implementing a read->write semaphore upgrade primitive but
> it cannot be reliable

There is no such thing. Never has been. It's a fundamentally impossible
operation. We may, at some point, decide to have a "read_for_write()" and
then "upgrade()" operations on the semaphore, but those inherently imply
some level of single-threading (ie only one read-for-writer accepted at
one time, with many pure readers), which makes it useless for this
particular case anyway.

However, having a finer-granularity spinlock _inside_ the semaphore (see
above suggestion) is a perfectly valid approach.

                        Linus

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



This archive was generated by hypermail 2b29 : Fri Sep 07 2001 - 21:00:42 EST