All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nick Piggin <nickpiggin@yahoo.com.au>
To: Hugh Dickins <hugh@veritas.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>,
	Linus Torvalds <torvalds@osdl.org>, Andrew Morton <akpm@osdl.org>,
	Robin Holt <holt@sgi.com>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	linux-mm@kvack.org, Ingo Molnar <mingo@elte.hu>,
	Roland McGrath <roland@redhat.com>
Subject: Re: [patch 2.6.13-rc4] fix get_user_pages bug
Date: Tue, 02 Aug 2005 22:28:07 +1000	[thread overview]
Message-ID: <42EF66D7.5040001@yahoo.com.au> (raw)
In-Reply-To: <Pine.LNX.4.61.0508021309470.3005@goblin.wat.veritas.com>

[-- Attachment #1: Type: text/plain, Size: 683 bytes --]

Hugh Dickins wrote:
> On Tue, 2 Aug 2005, Martin Schwidefsky wrote:

>>With the additional !pte_write(pte) check (and if I haven't overlooked
>>something which is not unlikely) s390 should work fine even without the
>>software-dirty bit hack.
> 
> 
> I agree the pte_write check ought to go back in next to the pte_dirty
> check, and that will leave s390 handling most uses of get_user_pages
> correctly, but still failing to handle the peculiar case of strace
> modifying a page to which the user does not currently have write access
> (e.g. setting a breakpoint in readonly text).
> 

Oh, here is the patch I sent Linus and forgot to CC
everyone else.

-- 
SUSE Labs, Novell Inc.


[-- Attachment #2: mm-opt-gup.patch --]
[-- Type: text/plain, Size: 1025 bytes --]

Allow __follow_page to succeed when encountering a clean, writeable
pte. Requires reintroduction of the direct page dirtying. Means
get_user_pages doesn't have to drop the page_table_lock and enter
the page fault handler for every clean, writeable pte it encounters
(when being called for write).

Signed-off-by: Nick Piggin <npiggin@suse.de>

Index: linux-2.6/mm/memory.c
===================================================================
--- linux-2.6.orig/mm/memory.c
+++ linux-2.6/mm/memory.c
@@ -811,15 +811,18 @@ static struct page *__follow_page(struct
 	pte = *ptep;
 	pte_unmap(ptep);
 	if (pte_present(pte)) {
-		if (write && !pte_dirty(pte))
+		if (write && !pte_write(pte) && !pte_dirty(pte))
 			goto out;
 		if (read && !pte_read(pte))
 			goto out;
 		pfn = pte_pfn(pte);
 		if (pfn_valid(pfn)) {
 			page = pfn_to_page(pfn);
-			if (accessed)
+			if (accessed) {
+				if (write && !pte_dirty(pte)&& !PageDirty(page))
+					set_page_dirty(page);
 				mark_page_accessed(page);
+			}
 			return page;
 		}
 	}

  reply	other threads:[~2005-08-02 12:31 UTC|newest]

Thread overview: 133+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-30 20:53 get_user_pages() with write=1 and force=1 gets read-only pages Robin Holt
2005-07-30 22:13 ` Hugh Dickins
2005-07-31  1:52   ` Nick Piggin
2005-07-31 10:52     ` Robin Holt
2005-07-31 11:07       ` Nick Piggin
2005-07-31 11:30         ` Robin Holt
2005-07-31 11:39           ` Robin Holt
2005-07-31 12:09           ` Robin Holt
2005-07-31 22:27             ` Nick Piggin
2005-08-01  3:22               ` Roland McGrath
2005-08-01  8:21                 ` [patch 2.6.13-rc4] fix get_user_pages bug Nick Piggin
2005-08-01  9:19                   ` Ingo Molnar
2005-08-01  9:19                     ` Ingo Molnar
2005-08-01  9:27                     ` Nick Piggin
2005-08-01  9:27                       ` Nick Piggin
2005-08-01 10:15                       ` Ingo Molnar
2005-08-01 10:15                         ` Ingo Molnar
2005-08-01 10:57                         ` Nick Piggin
2005-08-01 10:57                           ` Nick Piggin
2005-08-01 19:43                           ` Hugh Dickins
2005-08-01 19:43                             ` Hugh Dickins
2005-08-01 20:08                             ` Linus Torvalds
2005-08-01 20:08                               ` Linus Torvalds
2005-08-01 21:06                               ` Hugh Dickins
2005-08-01 21:06                                 ` Hugh Dickins
2005-08-01 21:51                                 ` Linus Torvalds
2005-08-01 21:51                                   ` Linus Torvalds
2005-08-01 22:01                                   ` Linus Torvalds
2005-08-01 22:01                                     ` Linus Torvalds
2005-08-02 12:01                                     ` Martin Schwidefsky
2005-08-02 12:01                                       ` Martin Schwidefsky
2005-08-02 12:26                                       ` Hugh Dickins
2005-08-02 12:26                                         ` Hugh Dickins
2005-08-02 12:28                                         ` Nick Piggin [this message]
2005-08-02 15:19                                         ` Martin Schwidefsky
2005-08-02 15:19                                           ` Martin Schwidefsky
2005-08-02 15:30                                       ` Linus Torvalds
2005-08-02 15:30                                         ` Linus Torvalds
2005-08-02 16:03                                         ` Hugh Dickins
2005-08-02 16:03                                           ` Hugh Dickins
2005-08-02 16:25                                           ` Linus Torvalds
2005-08-02 16:25                                             ` Linus Torvalds
2005-08-02 17:02                                             ` Linus Torvalds
2005-08-02 17:02                                               ` Linus Torvalds
2005-08-02 17:27                                               ` Hugh Dickins
2005-08-02 17:27                                                 ` Hugh Dickins
2005-08-02 17:21                                             ` Hugh Dickins
2005-08-02 17:21                                               ` Hugh Dickins
2005-08-02 18:47                                               ` Linus Torvalds
2005-08-02 18:47                                                 ` Linus Torvalds
2005-08-02 19:20                                                 ` Hugh Dickins
2005-08-02 19:20                                                   ` Hugh Dickins
2005-08-02 19:54                                                   ` Linus Torvalds
2005-08-02 19:54                                                     ` Linus Torvalds
2005-08-02 20:55                                                     ` Hugh Dickins
2005-08-02 20:55                                                       ` Hugh Dickins
2005-08-03 10:24                                                       ` Nick Piggin
2005-08-03 11:47                                                         ` Hugh Dickins
2005-08-03 11:47                                                           ` Hugh Dickins
2005-08-03 12:13                                                           ` Nick Piggin
2005-08-03 12:13                                                             ` Nick Piggin
2005-08-03 16:12                                                         ` Linus Torvalds
2005-08-03 16:12                                                           ` Linus Torvalds
2005-08-03 16:39                                                           ` Linus Torvalds
2005-08-03 16:39                                                             ` Linus Torvalds
2005-08-03 16:42                                                             ` Linus Torvalds
2005-08-03 16:42                                                               ` Linus Torvalds
2005-08-03 17:12                                                           ` Hugh Dickins
2005-08-03 17:12                                                             ` Hugh Dickins
2005-08-03 23:03                                                           ` Nick Piggin
2005-08-03 23:03                                                             ` Nick Piggin
2005-08-04 14:14                                                           ` Alexander Nyberg
2005-08-04 14:14                                                             ` Alexander Nyberg
2005-08-04 14:30                                                             ` Nick Piggin
2005-08-04 14:30                                                               ` Nick Piggin
2005-08-04 15:00                                                               ` Alexander Nyberg
2005-08-04 15:00                                                                 ` Alexander Nyberg
2005-08-04 15:35                                                                 ` Hugh Dickins
2005-08-04 15:35                                                                   ` Hugh Dickins
2005-08-04 16:32                                                                   ` Russell King
2005-08-04 16:32                                                                     ` Russell King
2005-08-04 15:36                                                                 ` Linus Torvalds
2005-08-04 15:36                                                                   ` Linus Torvalds
2005-08-04 16:29                                                               ` Russell King
2005-08-04 16:29                                                                 ` Russell King
2005-08-03 10:24                                                       ` Martin Schwidefsky
2005-08-03 10:24                                                         ` Martin Schwidefsky
2005-08-03 11:57                                                         ` Hugh Dickins
2005-08-03 11:57                                                           ` Hugh Dickins
2005-08-02 16:44                                         ` Martin Schwidefsky
2005-08-02 16:44                                           ` Martin Schwidefsky
2005-08-01 15:42                   ` Linus Torvalds
2005-08-01 15:42                     ` Linus Torvalds
2005-08-01 18:18                     ` Linus Torvalds
2005-08-01 18:18                       ` Linus Torvalds
2005-08-03  8:24                       ` Robin Holt
2005-08-03  8:24                         ` Robin Holt
2005-08-03 11:31                         ` Hugh Dickins
2005-08-03 11:31                           ` Hugh Dickins
2005-08-04 11:48                           ` Robin Holt
2005-08-04 11:48                             ` Robin Holt
2005-08-04 13:04                             ` Hugh Dickins
2005-08-04 13:04                               ` Hugh Dickins
2005-08-01 19:29                     ` Hugh Dickins
2005-08-01 19:29                       ` Hugh Dickins
2005-08-01 19:48                       ` Linus Torvalds
2005-08-01 19:48                         ` Linus Torvalds
2005-08-02  8:07                         ` Martin Schwidefsky
2005-08-02  8:07                           ` Martin Schwidefsky
2005-08-01 19:57                       ` Andrew Morton
2005-08-01 19:57                         ` Andrew Morton
2005-08-01 20:16                         ` Linus Torvalds
2005-08-01 20:16                           ` Linus Torvalds
2005-08-02  0:14                     ` Nick Piggin
2005-08-02  0:14                       ` Nick Piggin
2005-08-02  1:27                     ` Nick Piggin
2005-08-02  1:27                       ` Nick Piggin
2005-08-02  3:45                       ` Linus Torvalds
2005-08-02  3:45                         ` Linus Torvalds
2005-08-02  4:25                         ` Nick Piggin
2005-08-02  4:25                           ` Nick Piggin
2005-08-02  4:35                           ` Linus Torvalds
2005-08-02  4:35                             ` Linus Torvalds
2005-08-01 20:03                   ` Hugh Dickins
2005-08-01 20:03                     ` Hugh Dickins
2005-08-01 20:12                     ` Andrew Morton
2005-08-01 20:12                       ` Andrew Morton
2005-08-01 20:26                       ` Linus Torvalds
2005-08-01 20:26                         ` Linus Torvalds
2005-08-01 20:51                       ` Hugh Dickins
2005-08-01 20:51                         ` Hugh Dickins
  -- strict thread matches above, loose matches on Subject: below --
2005-08-02 14:02 Dan Higgins
2005-08-02 14:02 ` Dan Higgins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=42EF66D7.5040001@yahoo.com.au \
    --to=nickpiggin@yahoo.com.au \
    --cc=akpm@osdl.org \
    --cc=holt@sgi.com \
    --cc=hugh@veritas.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mingo@elte.hu \
    --cc=roland@redhat.com \
    --cc=schwidefsky@de.ibm.com \
    --cc=torvalds@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.