I think I found a minor bug:
do_wp_page() does not call spin_unlock() if called with bad parameters:
if "goto  bad_wp_page" is executed, then noone unlocks the page_table_lock spinlock.
 
My second question is the mm semaphore:
It seems that if in a multi threaded application several threads access a large mmaped file, that then all page-in operations are serialized (including waiting for the disk IO)
Is that correct?
Are there any plans to change that?
 
a possible alternative:
* every mm has a linked list of all pages the OS is currently working on.
* instead of just acquiring the mm semaphore, every operation must first check that there are no collisions with pending operations, then it acquires the semaphore.
* we drop the mm semaphore during long (i.e. IO) operations.
 
Please Cc, I´m currently not on the mailing list.
--
    Manfred