Document ->page_mkwrite() locking
authorMark Fasheh <mark.fasheh@oracle.com>
Thu, 19 Jul 2007 08:47:01 +0000 (01:47 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 19 Jul 2007 17:04:41 +0000 (10:04 -0700)
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>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: David Howells <dhowells@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Documentation/filesystems/Locking

index 970c8ec..91ec4b4 100644 (file)
@@ -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