Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Mark Fasheh
Date: Friday, June 1, 2007 - 3:01 pm

On Thu, May 31, 2007 at 10:20:39PM -0700, Mark Fasheh wrote:

Ok - this patch seems to check out fine in testing - no more deadlocking.

Andrew, if this is ok with you I'd really like to see that fix in -mm. Ocfs2
shared write mmap will instantly deadlock without it.

mm-fix-fault-vs-invalidate-race-for-linear-mappings.patch I think we're
pretty safe (as I noted before) because Ocfs2 re-checks the mapping under
lock to protect against trucate races. That's been an "unwritten"
requirement of page_mkwrite() anyway.

Speaking of requirements, attached is my sad attempt at documenting the API.
I know it might be merged into ->fault at some point, but we really ought to
have _something_ in the meantime.
	--Mark

--
Mark Fasheh
Senior Software Developer, Oracle
mark.fasheh@oracle.com


From: Mark Fasheh <mark.fasheh@oracle.com>

[PATCH] Document ->page_mkwrite() locking

There seems to be very little documentation about this callback in general.
The locking in particular is a bit tricky, so it's worth having this in
writing.

Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>

---

 Documentation/filesystems/Locking |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)

2320eadfa34199c779638edbdbb6c491df09c49b
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
index 970c8ec..91ec4b4 100644
--- a/Documentation/filesystems/Locking
+++ b/Documentation/filesystems/Locking
@@ -512,13 +512,22 @@ prototypes:
 	void (*close)(struct vm_area_struct*);
 	struct page *(*fault)(struct vm_area_struct*, struct fault_data *);
 	struct page *(*nopage)(struct vm_area_struct*, unsigned long, int *);
+	int (*page_mkwrite)(struct vm_area_struct *, struct page *);
 
 locking rules:
-		BKL	mmap_sem
+		BKL	mmap_sem	PageLocked(page)
 open:		no	yes
 close:		no	yes
 fault:		no	yes
 nopage:		no	yes
+page_mkwrite:	no	yes		no
+
+	->page_mkwrite() is called when a previously read-only page is
+about to become writeable. The file system is responsible for
+protecting against truncate races. Once appropriate action has been
+taking to lock out truncate, the page range should be verified to be
+within i_size. The page mapping should also be checked that it is not
+NULL.
 
 ================================================================================
 			Dubious stuff
-- 
1.3.3

-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
2.6.22-rc3-mm1, Andrew Morton, (Wed May 30, 11:58 pm)
Re: 2.6.22-rc3-mm1, Cornelia Huck, (Thu May 31, 5:09 am)
Re: 2.6.22-rc3-mm1, Matthew Wilcox, (Thu May 31, 5:15 am)
Re: 2.6.22-rc3-mm1, Cornelia Huck, (Thu May 31, 5:20 am)
Re: 2.6.22-rc3-mm1, Jeff Garzik, (Thu May 31, 5:35 am)
Re: 2.6.22-rc3-mm1, Cornelia Huck, (Thu May 31, 8:11 am)
Re: 2.6.22-rc3-mm1, Christoph Hellwig, (Thu May 31, 8:13 am)
Re: 2.6.22-rc3-mm1, Michal Piotrowski, (Thu May 31, 8:29 am)
Re: 2.6.22-rc3-mm1, Michal Piotrowski, (Thu May 31, 10:53 am)
Re: 2.6.22-rc3-mm1, Michal Piotrowski, (Thu May 31, 11:08 am)
Re: 2.6.22-rc3-mm1, Andrew Morton, (Thu May 31, 11:31 am)
Re: 2.6.22-rc3-mm1, Christoph Lameter, (Thu May 31, 11:41 am)
Re: 2.6.22-rc3-mm1, Andrew Morton, (Thu May 31, 11:53 am)
Re: 2.6.22-rc3-mm1, Christoph Lameter, (Thu May 31, 11:57 am)
Re: 2.6.22-rc3-mm1, Rafael J. Wysocki, (Thu May 31, 12:58 pm)
Re: 2.6.22-rc3-mm1, Mariusz Kozlowski, (Thu May 31, 1:43 pm)
Re: 2.6.22-rc3-mm1, Andrew Morton, (Thu May 31, 2:19 pm)
[PATCH -mm] Freezer: migration_thread should not be freeza ..., Rafael J. Wysocki, (Thu May 31, 2:30 pm)
Re: 2.6.22-rc3-mm1 - works-for-me and a meta-question..., Valdis.Kletnieks, (Thu May 31, 3:05 pm)
Re: 2.6.22-rc3-mm1, Andrew Morton, (Thu May 31, 3:10 pm)
Re: 2.6.22-rc3-mm1 - works-for-me and a meta-question..., Andrew Morton, (Thu May 31, 3:16 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Mark Fasheh, (Thu May 31, 4:13 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Nick Piggin, (Thu May 31, 6:01 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Mark Fasheh, (Thu May 31, 6:24 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Nick Piggin, (Thu May 31, 6:34 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Mark Fasheh, (Thu May 31, 6:45 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Nick Piggin, (Thu May 31, 6:53 pm)
Re: 2.6.22-rc3-mm1, Arnaldo Carvalho de Melo, (Thu May 31, 7:01 pm)
Re: 2.6.22-rc3-mm1, Andrew Morton, (Thu May 31, 7:12 pm)
Re: 2.6.22-rc3-mm1, Arnaldo Carvalho de Melo, (Thu May 31, 7:24 pm)
Re: 2.6.22-rc3-mm1, Michael Ellerman, (Thu May 31, 8:52 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Mark Fasheh, (Thu May 31, 10:20 pm)
Re: 2.6.22-rc3-mm1, Eric W. Biederman, (Thu May 31, 10:55 pm)
Re: 2.6.22-rc3-mm1, Cornelia Huck, (Fri Jun 1, 12:09 am)
2.6.22-rc3-mm1: IA64 make allnoconfig broken, Mel Gorman, (Fri Jun 1, 9:42 am)
Re: 2.6.22-rc3-mm1: IA64 make allnoconfig broken, Andrew Morton, (Fri Jun 1, 10:00 am)
Re: 2.6.22-rc3-mm1: IA64 make allnoconfig broken, Mel Gorman, (Fri Jun 1, 11:50 am)
Re: 2.6.22-rc3-mm1, Mariusz Kozlowski, (Fri Jun 1, 1:50 pm)
[PATCH] Fix problem with IA64 make allnoconfig, Mel Gorman, (Fri Jun 1, 1:55 pm)
Re: 2.6.22-rc3-mm1, Andrew Morton, (Fri Jun 1, 2:02 pm)
Re: 2.6.22-rc3-mm1, Mariusz Kozlowski, (Fri Jun 1, 2:21 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Mark Fasheh, (Fri Jun 1, 3:01 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Andrew Morton, (Fri Jun 1, 3:25 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Mark Fasheh, (Fri Jun 1, 3:33 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Andrew Morton, (Fri Jun 1, 3:47 pm)
Re: 2.6.22-rc3-mm1 - page_mkwrite() breakage, Mark Fasheh, (Fri Jun 1, 3:53 pm)
Re: 2.6.22-rc3-mm1, Benjamin Herrenschmidt, (Fri Jun 1, 4:30 pm)
Re: 2.6.22-rc3-mm1, Segher Boessenkool, (Sat Jun 2, 1:40 am)
2.6.22-rc3-mm1: Xen compile error with X86_CMPXCHG=n, Adrian Bunk, (Sat Jun 2, 6:57 am)
[-mm patch] fix XEN_BLKDEV_FRONTEND Makefile entry, Adrian Bunk, (Sat Jun 2, 10:06 am)
[-mm patch] make xpad_play_effect() static, Adrian Bunk, (Sun Jun 3, 1:54 pm)
[-mm patch] fix the tea5761 tuner support, Adrian Bunk, (Sun Jun 3, 1:54 pm)
[-mm patch] e1000: #if 0 two functions, Adrian Bunk, (Mon Jun 4, 3:12 pm)
[-mm patch] drivers/mmc/core/core.{h,c}: cleanups, Adrian Bunk, (Mon Jun 4, 3:13 pm)
Re: 2.6.22-rc3-mm1, Ingo Molnar, (Tue Jun 5, 2:11 am)
Re: 2.6.22-rc3-mm1, Ingo Molnar, (Tue Jun 5, 2:18 am)
Re: 2.6.22-rc3-mm1, Andrew Morton, (Tue Jun 5, 2:24 am)
Re: 2.6.22-rc3-mm1, Ingo Molnar, (Tue Jun 5, 2:33 am)
Re: 2.6.22-rc3-mm1, Ingo Molnar, (Tue Jun 5, 2:39 am)
Re: 2.6.22-rc3-mm1, Ingo Molnar, (Tue Jun 5, 2:42 am)
Re: 2.6.22-rc3-mm1, Ingo Molnar, (Tue Jun 5, 2:45 am)
Re: 2.6.22-rc3-mm1, Ingo Molnar, (Tue Jun 5, 2:50 am)
Re: 2.6.22-rc3 nmi watchdog hang, Ingo Molnar, (Tue Jun 5, 2:56 am)
Re: 2.6.22-rc3-mm1, Rusty Russell, (Tue Jun 5, 8:16 am)
[-mm patch] kernel/power/disk.c: make code static, Adrian Bunk, (Tue Jun 5, 2:50 pm)
[-mm patch] kernel/sched{,_fair}.c: make code static, Adrian Bunk, (Tue Jun 5, 2:50 pm)
[-mm patch] fs/proc/base.c: make a struct static, Adrian Bunk, (Tue Jun 5, 2:51 pm)
Re: [-mm patch] kernel/power/disk.c: make code static, Rafael J. Wysocki, (Tue Jun 5, 3:10 pm)
Re: [-mm patch] kernel/sched{,_fair}.c: make code static, Andrew Morton, (Tue Jun 5, 11:54 pm)
Re: [-mm patch] fs/proc/base.c: make a struct static, Ingo Molnar, (Wed Jun 6, 12:32 am)
Re: [-mm patch] drivers/mmc/core/core.{h,c}: cleanups, Pierre Ossman, (Wed Jun 6, 11:36 am)
Re: 2.6.22-rc3 nmi watchdog hang, Björn, (Sun Jun 10, 11:10 am)
Re: 2.6.22-rc3 nmi watchdog hang, Ingo Molnar, (Mon Jun 18, 5:11 am)
Re: 2.6.22-rc3 nmi watchdog hang, Björn, (Mon Jun 18, 7:31 am)
Re: 2.6.22-rc3 nmi watchdog hang, Ingo Molnar, (Sun Jun 24, 11:18 pm)
Re: 2.6.22-rc3 nmi watchdog hang, Ingo Molnar, (Sun Jun 24, 11:59 pm)
[patch, 2.6.22-rc6] fix nmi_watchdog=2 bootup hang, Ingo Molnar, (Mon Jun 25, 1:05 am)
Re: [patch, 2.6.22-rc6] fix nmi_watchdog=2 bootup hang, Ingo Molnar, (Mon Jun 25, 1:26 am)
Re: [patch, 2.6.22-rc6] fix nmi_watchdog=2 bootup hang, Jeremy Fitzhardinge, (Mon Jun 25, 5:40 am)
Re: [patch, 2.6.22-rc6] fix nmi_watchdog=2 bootup hang, Jeremy Fitzhardinge, (Mon Jun 25, 5:49 am)
Re: 2.6.22-rc3-mm1: Xen compile error with X86_CMPXCHG=n, Jeremy Fitzhardinge, (Thu Jun 28, 8:21 pm)