]> err.no Git - linux-2.6/blobdiff - Documentation/filesystems/Locking
[INET]: Remove per bucket rwlock in tcp/dccp ehash table.
[linux-2.6] / Documentation / filesystems / Locking
index d866551be03790c20a00b5f96c41f9226260bcfa..37c10cba717725f599ec999eb0a0a4ff6b1fc483 100644 (file)
@@ -178,15 +178,18 @@ prototypes:
 locking rules:
        All except set_page_dirty may block
 
-                       BKL     PageLocked(page)
+                       BKL     PageLocked(page)        i_sem
 writepage:             no      yes, unlocks (see below)
 readpage:              no      yes, unlocks
 sync_page:             no      maybe
 writepages:            no
 set_page_dirty         no      no
 readpages:             no
-prepare_write:         no      yes
-commit_write:          no      yes
+prepare_write:         no      yes                     yes
+commit_write:          no      yes                     yes
+write_begin:           no      locks the page          yes
+write_end:             no      yes, unlocks            yes
+perform_write:         no      n/a                     yes
 bmap:                  yes
 invalidatepage:                no      yes
 releasepage:           no      yes
@@ -221,7 +224,7 @@ against the page the filesystem should redirty the page with
 redirty_page_for_writepage(), then unlock the page and return zero.
 This may also be done to avoid internal deadlocks, but rarely.
 
-If the filesytem is called for sync then it must wait on any
+If the filesystem is called for sync then it must wait on any
 in-progress I/O and then start new I/O.
 
 The filesystem should unlock the page synchronously, before returning to the
@@ -510,13 +513,24 @@ More details about quota locking can be found in fs/dquot.c.
 prototypes:
        void (*open)(struct vm_area_struct*);
        void (*close)(struct vm_area_struct*);
+       int (*fault)(struct vm_area_struct*, struct vm_fault *);
        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