diff options
author | Mark Fasheh <mark.fasheh@oracle.com> | 2007-07-19 04:47:01 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-19 13:04:41 -0400 |
commit | ed2f2f9b3ff8debdf512f7687b232c3c1d7d60d7 (patch) | |
tree | f935333e6d233ba0f119d4642b15063ba544fddf /Documentation | |
parent | 6967614761fd305b3414d9485d89dc2e0a407410 (diff) |
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>
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>
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/filesystems/Locking | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 970c8ec1a05b..91ec4b40ebfe 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -512,13 +512,22 @@ prototypes: | |||
512 | void (*close)(struct vm_area_struct*); | 512 | void (*close)(struct vm_area_struct*); |
513 | struct page *(*fault)(struct vm_area_struct*, struct fault_data *); | 513 | struct page *(*fault)(struct vm_area_struct*, struct fault_data *); |
514 | struct page *(*nopage)(struct vm_area_struct*, unsigned long, int *); | 514 | struct page *(*nopage)(struct vm_area_struct*, unsigned long, int *); |
515 | int (*page_mkwrite)(struct vm_area_struct *, struct page *); | ||
515 | 516 | ||
516 | locking rules: | 517 | locking rules: |
517 | BKL mmap_sem | 518 | BKL mmap_sem PageLocked(page) |
518 | open: no yes | 519 | open: no yes |
519 | close: no yes | 520 | close: no yes |
520 | fault: no yes | 521 | fault: no yes |
521 | nopage: no yes | 522 | nopage: no yes |
523 | page_mkwrite: no yes no | ||
524 | |||
525 | ->page_mkwrite() is called when a previously read-only page is | ||
526 | about to become writeable. The file system is responsible for | ||
527 | protecting against truncate races. Once appropriate action has been | ||
528 | taking to lock out truncate, the page range should be verified to be | ||
529 | within i_size. The page mapping should also be checked that it is not | ||
530 | NULL. | ||
522 | 531 | ||
523 | ================================================================================ | 532 | ================================================================================ |
524 | Dubious stuff | 533 | Dubious stuff |