diff options
Diffstat (limited to 'Documentation/filesystems/Locking')
-rw-r--r-- | Documentation/filesystems/Locking | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 33fa3e5d38fd..977d8919cc69 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -9,22 +9,25 @@ be able to use diff(1). | |||
9 | 9 | ||
10 | --------------------------- dentry_operations -------------------------- | 10 | --------------------------- dentry_operations -------------------------- |
11 | prototypes: | 11 | prototypes: |
12 | int (*d_revalidate)(struct dentry *, int); | 12 | int (*d_revalidate)(struct dentry *, struct nameidata *); |
13 | int (*d_hash) (struct dentry *, struct qstr *); | 13 | int (*d_hash)(const struct dentry *, const struct inode *, |
14 | int (*d_compare) (struct dentry *, struct qstr *, struct qstr *); | 14 | struct qstr *); |
15 | int (*d_compare)(const struct dentry *, const struct inode *, | ||
16 | const struct dentry *, const struct inode *, | ||
17 | unsigned int, const char *, const struct qstr *); | ||
15 | int (*d_delete)(struct dentry *); | 18 | int (*d_delete)(struct dentry *); |
16 | void (*d_release)(struct dentry *); | 19 | void (*d_release)(struct dentry *); |
17 | void (*d_iput)(struct dentry *, struct inode *); | 20 | void (*d_iput)(struct dentry *, struct inode *); |
18 | char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen); | 21 | char *(*d_dname)((struct dentry *dentry, char *buffer, int buflen); |
19 | 22 | ||
20 | locking rules: | 23 | locking rules: |
21 | dcache_lock rename_lock ->d_lock may block | 24 | rename_lock ->d_lock may block rcu-walk |
22 | d_revalidate: no no no yes | 25 | d_revalidate: no no yes (ref-walk) maybe |
23 | d_hash no no no yes | 26 | d_hash no no no maybe |
24 | d_compare: no yes no no | 27 | d_compare: yes no no maybe |
25 | d_delete: yes no yes no | 28 | d_delete: no yes no no |
26 | d_release: no no no yes | 29 | d_release: no no yes no |
27 | d_iput: no no no yes | 30 | d_iput: no no yes no |
28 | d_dname: no no no no | 31 | d_dname: no no no no |
29 | 32 | ||
30 | --------------------------- inode_operations --------------------------- | 33 | --------------------------- inode_operations --------------------------- |
@@ -44,8 +47,8 @@ ata *); | |||
44 | void * (*follow_link) (struct dentry *, struct nameidata *); | 47 | void * (*follow_link) (struct dentry *, struct nameidata *); |
45 | void (*put_link) (struct dentry *, struct nameidata *, void *); | 48 | void (*put_link) (struct dentry *, struct nameidata *, void *); |
46 | void (*truncate) (struct inode *); | 49 | void (*truncate) (struct inode *); |
47 | int (*permission) (struct inode *, int, struct nameidata *); | 50 | int (*permission) (struct inode *, int, unsigned int); |
48 | int (*check_acl)(struct inode *, int); | 51 | int (*check_acl)(struct inode *, int, unsigned int); |
49 | int (*setattr) (struct dentry *, struct iattr *); | 52 | int (*setattr) (struct dentry *, struct iattr *); |
50 | int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *); | 53 | int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *); |
51 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); | 54 | int (*setxattr) (struct dentry *, const char *,const void *,size_t,int); |
@@ -73,7 +76,7 @@ follow_link: no | |||
73 | put_link: no | 76 | put_link: no |
74 | truncate: yes (see below) | 77 | truncate: yes (see below) |
75 | setattr: yes | 78 | setattr: yes |
76 | permission: no | 79 | permission: no (may not block if called in rcu-walk mode) |
77 | check_acl: no | 80 | check_acl: no |
78 | getattr: no | 81 | getattr: no |
79 | setxattr: yes | 82 | setxattr: yes |