aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/filesystems/Locking
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/filesystems/Locking')
-rw-r--r--Documentation/filesystems/Locking30
1 files changed, 22 insertions, 8 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
index 8e2da1e06e3b..0f103e39b4f6 100644
--- a/Documentation/filesystems/Locking
+++ b/Documentation/filesystems/Locking
@@ -9,7 +9,7 @@ be able to use diff(1).
9 9
10--------------------------- dentry_operations -------------------------- 10--------------------------- dentry_operations --------------------------
11prototypes: 11prototypes:
12 int (*d_revalidate)(struct dentry *, struct nameidata *); 12 int (*d_revalidate)(struct dentry *, unsigned int);
13 int (*d_hash)(const struct dentry *, const struct inode *, 13 int (*d_hash)(const struct dentry *, const struct inode *,
14 struct qstr *); 14 struct qstr *);
15 int (*d_compare)(const struct dentry *, const struct inode *, 15 int (*d_compare)(const struct dentry *, const struct inode *,
@@ -37,9 +37,8 @@ d_manage: no no yes (ref-walk) maybe
37 37
38--------------------------- inode_operations --------------------------- 38--------------------------- inode_operations ---------------------------
39prototypes: 39prototypes:
40 int (*create) (struct inode *,struct dentry *,umode_t, struct nameidata *); 40 int (*create) (struct inode *,struct dentry *,umode_t, bool);
41 struct dentry * (*lookup) (struct inode *,struct dentry *, struct nameid 41 struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
42ata *);
43 int (*link) (struct dentry *,struct inode *,struct dentry *); 42 int (*link) (struct dentry *,struct inode *,struct dentry *);
44 int (*unlink) (struct inode *,struct dentry *); 43 int (*unlink) (struct inode *,struct dentry *);
45 int (*symlink) (struct inode *,struct dentry *,const char *); 44 int (*symlink) (struct inode *,struct dentry *,const char *);
@@ -62,6 +61,9 @@ ata *);
62 int (*removexattr) (struct dentry *, const char *); 61 int (*removexattr) (struct dentry *, const char *);
63 int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len); 62 int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
64 void (*update_time)(struct inode *, struct timespec *, int); 63 void (*update_time)(struct inode *, struct timespec *, int);
64 int (*atomic_open)(struct inode *, struct dentry *,
65 struct file *, unsigned open_flag,
66 umode_t create_mode, int *opened);
65 67
66locking rules: 68locking rules:
67 all may block 69 all may block
@@ -89,6 +91,7 @@ listxattr: no
89removexattr: yes 91removexattr: yes
90fiemap: no 92fiemap: no
91update_time: no 93update_time: no
94atomic_open: yes
92 95
93 Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on 96 Additionally, ->rmdir(), ->unlink() and ->rename() have ->i_mutex on
94victim. 97victim.
@@ -135,8 +138,8 @@ evict_inode:
135put_super: write 138put_super: write
136write_super: read 139write_super: read
137sync_fs: read 140sync_fs: read
138freeze_fs: read 141freeze_fs: write
139unfreeze_fs: read 142unfreeze_fs: write
140statfs: maybe(read) (see below) 143statfs: maybe(read) (see below)
141remount_fs: write 144remount_fs: write
142umount_begin: no 145umount_begin: no
@@ -203,6 +206,8 @@ prototypes:
203 int (*launder_page)(struct page *); 206 int (*launder_page)(struct page *);
204 int (*is_partially_uptodate)(struct page *, read_descriptor_t *, unsigned long); 207 int (*is_partially_uptodate)(struct page *, read_descriptor_t *, unsigned long);
205 int (*error_remove_page)(struct address_space *, struct page *); 208 int (*error_remove_page)(struct address_space *, struct page *);
209 int (*swap_activate)(struct file *);
210 int (*swap_deactivate)(struct file *);
206 211
207locking rules: 212locking rules:
208 All except set_page_dirty and freepage may block 213 All except set_page_dirty and freepage may block
@@ -226,6 +231,8 @@ migratepage: yes (both)
226launder_page: yes 231launder_page: yes
227is_partially_uptodate: yes 232is_partially_uptodate: yes
228error_remove_page: yes 233error_remove_page: yes
234swap_activate: no
235swap_deactivate: no
229 236
230 ->write_begin(), ->write_end(), ->sync_page() and ->readpage() 237 ->write_begin(), ->write_end(), ->sync_page() and ->readpage()
231may be called from the request handler (/dev/loop). 238may be called from the request handler (/dev/loop).
@@ -327,6 +334,15 @@ cleaned, or an error value if not. Note that in order to prevent the page
327getting mapped back in and redirtied, it needs to be kept locked 334getting mapped back in and redirtied, it needs to be kept locked
328across the entire operation. 335across the entire operation.
329 336
337 ->swap_activate will be called with a non-zero argument on
338files backing (non block device backed) swapfiles. A return value
339of zero indicates success, in which case this file can be used for
340backing swapspace. The swapspace operations will be proxied to the
341address space operations.
342
343 ->swap_deactivate() will be called in the sys_swapoff()
344path after ->swap_activate() returned success.
345
330----------------------- file_lock_operations ------------------------------ 346----------------------- file_lock_operations ------------------------------
331prototypes: 347prototypes:
332 void (*fl_copy_lock)(struct file_lock *, struct file_lock *); 348 void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
@@ -343,7 +359,6 @@ prototypes:
343 int (*lm_compare_owner)(struct file_lock *, struct file_lock *); 359 int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
344 void (*lm_notify)(struct file_lock *); /* unblock callback */ 360 void (*lm_notify)(struct file_lock *); /* unblock callback */
345 int (*lm_grant)(struct file_lock *, struct file_lock *, int); 361 int (*lm_grant)(struct file_lock *, struct file_lock *, int);
346 void (*lm_release_private)(struct file_lock *);
347 void (*lm_break)(struct file_lock *); /* break_lease callback */ 362 void (*lm_break)(struct file_lock *); /* break_lease callback */
348 int (*lm_change)(struct file_lock **, int); 363 int (*lm_change)(struct file_lock **, int);
349 364
@@ -352,7 +367,6 @@ locking rules:
352lm_compare_owner: yes no 367lm_compare_owner: yes no
353lm_notify: yes no 368lm_notify: yes no
354lm_grant: no no 369lm_grant: no no
355lm_release_private: maybe no
356lm_break: yes no 370lm_break: yes no
357lm_change yes no 371lm_change yes no
358 372