From: Mark Fasheh <mark.fasheh@oracle.com>
To: Nick Piggin <npiggin@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>, linux-kernel@vger.kernel.org
Subject: Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage
Date: Thu, 31 May 2007 22:20:39 -0700 [thread overview]
Message-ID: <20070601052039.GU20632@ca-server1.us.oracle.com> (raw)
In-Reply-To: <20070601015349.GC28585@wotan.suse.de>
On Fri, Jun 01, 2007 at 03:53:49AM +0200, Nick Piggin wrote:
> On Thu, May 31, 2007 at 06:45:17PM -0700, Mark Fasheh wrote:
> > On Fri, Jun 01, 2007 at 03:34:02AM +0200, Nick Piggin wrote:
> > > > Here's a nasty idea... Would it be valid for ->page_mkwrite to unlock the
> > > > page, so long as it's returned in a locked state? Though, do we even need
> > > > the page lock that early? It seemed to me that you were adding it for
> > > > consistency reasons (I could be wrong though).
> > >
> > > You could do that, but you'd have to probably check that it is
> > > within i_size after you relock it, I think... yeah, that might
> > > be the best thing for ocfs to do for now.
Ok. So how about the attached patch? It's a bit different than discussed,
but I think it's much cleaner because it preserves the current behavior of
the callback and keeps that bit of page locking inside core code. Not tested
as of yet, but I can run it tommorrow.
--Mark
--
Mark Fasheh
Senior Software Developer, Oracle
mark.fasheh@oracle.com
From: Mark Fasheh <mark.fasheh@oracle.com>
[PATCH] Release page lock before calling ->page_mkwrite
__do_fault() was calling ->page_mkwrite() with the page lock held, which
violates the locking rules for that callback. Release and retake the page
lock around the callback to avoid deadlocking file systems which manually
take it.
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
---
mm/memory.c | 14 +++++++++-----
1 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/mm/memory.c b/mm/memory.c
index 7221618..491cc27 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -2378,11 +2378,14 @@ static int __do_fault(struct mm_struct *
* address space wants to know that the page is about
* to become writable
*/
- if (vma->vm_ops->page_mkwrite &&
- vma->vm_ops->page_mkwrite(vma, page) < 0) {
- fdata.type = VM_FAULT_SIGBUS;
- anon = 1; /* no anon but release faulted_page */
- goto out;
+ if (vma->vm_ops->page_mkwrite) {
+ unlock_page(page);
+ if (vma->vm_ops->page_mkwrite(vma, page) < 0) {
+ fdata.type = VM_FAULT_SIGBUS;
+ anon = 1; /* no anon but release faulted_page */
+ goto out_unlocked;
+ }
+ lock_page(page);
}
}
@@ -2434,6 +2437,7 @@ static int __do_fault(struct mm_struct *
out:
unlock_page(faulted_page);
+out_unlocked:
if (anon)
page_cache_release(faulted_page);
else if (dirty_page) {
--
1.4.2.3
next prev parent reply other threads:[~2007-06-01 5:20 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-31 6:58 2.6.22-rc3-mm1 Andrew Morton
2007-05-31 12:09 ` 2.6.22-rc3-mm1 Cornelia Huck
2007-05-31 12:15 ` 2.6.22-rc3-mm1 Matthew Wilcox
2007-05-31 12:20 ` 2.6.22-rc3-mm1 Cornelia Huck
2007-05-31 12:35 ` 2.6.22-rc3-mm1 Jeff Garzik
2007-05-31 15:11 ` 2.6.22-rc3-mm1 Cornelia Huck
2007-05-31 15:13 ` 2.6.22-rc3-mm1 Christoph Hellwig
2007-05-31 22:10 ` 2.6.22-rc3-mm1 Andrew Morton
2007-06-01 7:09 ` 2.6.22-rc3-mm1 Cornelia Huck
2007-05-31 15:29 ` 2.6.22-rc3-mm1 Michal Piotrowski
2007-05-31 19:58 ` 2.6.22-rc3-mm1 Rafael J. Wysocki
2007-05-31 21:30 ` [PATCH -mm] Freezer: migration_thread should not be freezable (was: Re: [linux-pm] Re: 2.6.22-rc3-mm1) Rafael J. Wysocki
[not found] ` <6bffcb0e0705311425q2e00cc69j5006d95c3f0df158@mail.gmail.com>
2007-05-31 21:34 ` 2.6.22-rc3-mm1 Rafael J. Wysocki
2007-05-31 17:53 ` 2.6.22-rc3-mm1 Michal Piotrowski
2007-05-31 18:08 ` 2.6.22-rc3-mm1 Michal Piotrowski
2007-05-31 18:31 ` 2.6.22-rc3-mm1 Andrew Morton
2007-05-31 18:41 ` 2.6.22-rc3-mm1 Christoph Lameter
2007-05-31 18:53 ` 2.6.22-rc3-mm1 Andrew Morton
2007-05-31 18:57 ` 2.6.22-rc3-mm1 Christoph Lameter
2007-05-31 20:43 ` 2.6.22-rc3-mm1 Mariusz Kozlowski
2007-05-31 21:19 ` 2.6.22-rc3-mm1 Andrew Morton
2007-06-01 20:50 ` 2.6.22-rc3-mm1 Mariusz Kozlowski
2007-06-01 21:02 ` 2.6.22-rc3-mm1 Andrew Morton
2007-06-01 21:21 ` 2.6.22-rc3-mm1 Mariusz Kozlowski
2007-06-01 23:30 ` 2.6.22-rc3-mm1 Benjamin Herrenschmidt
2007-06-02 8:40 ` 2.6.22-rc3-mm1 Segher Boessenkool
2007-05-31 22:05 ` 2.6.22-rc3-mm1 - works-for-me and a meta-question Valdis.Kletnieks
2007-05-31 22:16 ` Andrew Morton
[not found] ` <6bffcb0e0705311527ge774f48s8014f5108556f651@mail.gmail.com>
2007-05-31 23:21 ` andrea
2007-05-31 23:13 ` 2.6.22-rc3-mm1 - page_mkwrite() breakage Mark Fasheh
2007-06-01 1:01 ` Nick Piggin
2007-06-01 1:24 ` Mark Fasheh
2007-06-01 1:34 ` Nick Piggin
2007-06-01 1:45 ` Mark Fasheh
2007-06-01 1:53 ` Nick Piggin
2007-06-01 5:20 ` Mark Fasheh [this message]
2007-06-01 22:01 ` Mark Fasheh
2007-06-01 22:25 ` Andrew Morton
2007-06-01 22:33 ` Mark Fasheh
2007-06-01 22:47 ` Andrew Morton
2007-06-01 22:53 ` Mark Fasheh
2007-06-01 2:01 ` 2.6.22-rc3-mm1 Arnaldo Carvalho de Melo
2007-06-01 2:12 ` 2.6.22-rc3-mm1 Andrew Morton
2007-06-01 2:24 ` 2.6.22-rc3-mm1 Arnaldo Carvalho de Melo
2007-06-01 3:52 ` 2.6.22-rc3-mm1 Michael Ellerman
2007-06-01 5:55 ` 2.6.22-rc3-mm1 Eric W. Biederman
2007-06-01 16:42 ` 2.6.22-rc3-mm1: IA64 make allnoconfig broken Mel Gorman
2007-06-01 17:00 ` Andrew Morton
2007-06-01 18:50 ` Mel Gorman
2007-06-01 20:55 ` [PATCH] Fix problem with IA64 make allnoconfig Mel Gorman
2007-06-02 13:57 ` 2.6.22-rc3-mm1: Xen compile error with X86_CMPXCHG=n Adrian Bunk
2007-06-28 23:36 ` Adrian Bunk
2007-06-29 3:21 ` Jeremy Fitzhardinge
2007-06-02 17:06 ` [-mm patch] fix XEN_BLKDEV_FRONTEND Makefile entry Adrian Bunk
2007-06-02 17:14 ` 2.6.22-rc3-mm1: __attribute__((weak)) considered harmful Adrian Bunk
2007-06-04 21:22 ` Andrew Morton
2007-06-04 23:52 ` Martin Peschke
2007-06-05 3:59 ` Russell King
2007-06-02 19:09 ` [-mm patch] the ASYNC_* options shouldn't be user visible Adrian Bunk
2007-06-04 16:19 ` Williams, Dan J
2007-06-03 20:54 ` [-mm patch] make drivers/firmware/dmi-id.c:dmi_id_init() static Adrian Bunk
2007-06-08 4:38 ` Greg KH
2007-06-03 20:54 ` [-mm patch] drivers/i2c/chips/ds1682.c: make code static Adrian Bunk
2007-06-04 8:15 ` Jean Delvare
2007-06-03 20:54 ` [-mm patch] make xpad_play_effect() static Adrian Bunk
2007-06-03 20:54 ` [-mm patch] fix the tea5761 tuner support Adrian Bunk
2007-06-04 18:00 ` 2.6.22-rc3-mm1 - pppd hanging in netdev_run_todo while holding mutex Valdis.Kletnieks
2007-06-06 6:14 ` Andrew Morton
2007-06-04 22:12 ` [-mm patch] e1000: #if 0 two functions Adrian Bunk
2007-06-04 22:13 ` [-mm patch] drivers/mmc/core/core.{h,c}: cleanups Adrian Bunk
2007-06-06 18:36 ` Pierre Ossman
2007-06-05 9:11 ` 2.6.22-rc3-mm1 Ingo Molnar
2007-06-05 9:18 ` 2.6.22-rc3-mm1 Ingo Molnar
2007-06-05 9:24 ` 2.6.22-rc3-mm1 Andrew Morton
2007-06-05 9:33 ` 2.6.22-rc3-mm1 Ingo Molnar
2007-06-05 9:39 ` 2.6.22-rc3-mm1 Ingo Molnar
2007-06-05 9:42 ` 2.6.22-rc3-mm1 Ingo Molnar
2007-06-05 9:45 ` 2.6.22-rc3-mm1 Ingo Molnar
2007-06-05 9:50 ` 2.6.22-rc3-mm1 Ingo Molnar
2007-06-05 9:56 ` 2.6.22-rc3 nmi watchdog hang Ingo Molnar
2007-06-10 18:10 ` Björn Steinbrink
2007-06-18 12:11 ` Ingo Molnar
2007-06-18 14:31 ` Björn Steinbrink
2007-06-25 6:18 ` Ingo Molnar
2007-06-25 6:59 ` Ingo Molnar
2007-06-25 8:05 ` [patch, 2.6.22-rc6] fix nmi_watchdog=2 bootup hang Ingo Molnar
2007-06-25 8:26 ` Ingo Molnar
2007-06-25 12:45 ` Björn Steinbrink
2007-06-25 12:49 ` Jeremy Fitzhardinge
2007-06-25 13:06 ` Björn Steinbrink
2007-06-25 18:50 ` [patch, 2.6.22-rc6] fix nmi_watchdog=2 bootup hang, take #2 Ingo Molnar
2007-06-25 12:40 ` [patch, 2.6.22-rc6] fix nmi_watchdog=2 bootup hang Jeremy Fitzhardinge
2007-06-25 13:13 ` Björn Steinbrink
2007-06-05 15:16 ` 2.6.22-rc3-mm1 Rusty Russell
2007-06-05 21:50 ` [-mm patch] kernel/power/disk.c: make code static Adrian Bunk
2007-06-05 22:10 ` Rafael J. Wysocki
2007-06-05 21:50 ` [-mm patch] kernel/sched{,_fair}.c: " Adrian Bunk
2007-06-06 6:54 ` Andrew Morton
2007-06-06 7:30 ` Ingo Molnar
2007-06-06 12:31 ` Adrian Bunk
2007-06-06 7:02 ` Ingo Molnar
2007-06-05 21:51 ` [-mm patch] kernel/lockdep_proc.c: make 2 functions static Adrian Bunk
2007-06-05 22:34 ` Peter Zijlstra
2007-06-05 21:51 ` [-mm patch] fs/proc/base.c: make a struct static Adrian Bunk
2007-06-06 7:32 ` Ingo Molnar
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=20070601052039.GU20632@ca-server1.us.oracle.com \
--to=mark.fasheh@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=npiggin@suse.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox