Hugh's posting said:
"it's trying to avoid an endless loop of finding the pte not writable when ptrace is modifying a page which the user is currently protected against writing to (setting a breakpoint in readonly text, perhaps?)"
i'm wondering, why should that case generate an infinite fault? The first write access should copy the shared-library page into a private page and map it into the task's MM, writable. If this make-writable
operation races with a read access then we return a minor fault and the page is still readonly, but retrying the write should then break up the COW protection and generate a writable page, and a subsequent follow_page() success. If the page cannot be made writable, shouldnt the vma flags reflect this fact by not having the VM_MAYWRITE flag, and hence get_user_pages() should have returned with -EFAULT earlier?