From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nick Piggin Subject: Re: Can get_user_pages( ,write=1, force=1, ) result in a read-only pte and _count=2? Date: Thu, 19 Jun 2008 22:07:40 +1000 References: <20080618164158.GC10062@sgi.com> <200806191331.32056.nickpiggin@yahoo.com.au> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200806192207.40838.nickpiggin@yahoo.com.au> Sender: owner-linux-mm@kvack.org Return-Path: To: Hugh Dickins Cc: Robin Holt , Ingo Molnar , Christoph Lameter , Jack Steiner , linux-mm@kvack.org List-ID: On Thursday 19 June 2008 21:39, Hugh Dickins wrote: > That indeterminism has certainly bothered me too. There was another > interesting case which it interfered with, a year or two back. I'll > have to search mboxes later to locate it. > > We do have page table lock at that point, so it gets a bit tedious > (like the page_mkwrite case) to use lock_page there: more overhead > than just that of the lock_page. Mmm, right. > I've had a quick look at my collection of uncompleted/unpublished > swap patches, and here's a hunk from one of them which is trying > to address that point. But I'll have to look back and see what > else this depends upon. > > - if (!TestSetPageLocked(old_page)) { > - reuse = can_share_swap_page(old_page); > - unlock_page(old_page); > + if (page_mapcount(old_page) == 1) { > + extern int page_swapcount(struct page *); > + if (!PageSwapCache(old_page)) > + reuse = 1; > + else if (!TestSetPageLocked(old_page)) { > + reuse = !page_is_shared(old_page); > + unlock_page(old_page); > + } else if (!page_swapcount(old_page)) > + reuse = 1; > > I probably won't get back to this today. And there are also good > reasons in -mm for me to check back on all these swapcount issues. I don't see how you can get an accurate page_swapcount without the page lock. Anyway, if you volunteer to take a look at the problem, great. I expect Robin could just as well fix it for their code in the meantime by using force=0... -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org