diff options
author | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:49:28 -0500 |
---|---|---|
committer | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:50:20 -0500 |
commit | b1e6a015a580ad145689ad1d6b4aa0e03e6c868b (patch) | |
tree | 57a10ef164e4d2f798d9b832dbeaf973aca2ab83 /Documentation/filesystems | |
parent | 621e155a3591962420eacdd39f6f0aa29ceb221e (diff) |
fs: change d_hash for rcu-walk
Change d_hash so it may be called from lock-free RCU lookups. See similar
patch for d_compare for details.
For in-tree filesystems, this is just a mechanical change.
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Diffstat (limited to 'Documentation/filesystems')
-rw-r--r-- | Documentation/filesystems/Locking | 5 | ||||
-rw-r--r-- | Documentation/filesystems/porting | 7 | ||||
-rw-r--r-- | Documentation/filesystems/vfs.txt | 8 |
3 files changed, 16 insertions, 4 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 9a76f8d8bf95..a15ee207b449 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -10,7 +10,8 @@ be able to use diff(1). | |||
10 | --------------------------- dentry_operations -------------------------- | 10 | --------------------------- dentry_operations -------------------------- |
11 | prototypes: | 11 | prototypes: |
12 | int (*d_revalidate)(struct dentry *, int); | 12 | int (*d_revalidate)(struct dentry *, int); |
13 | int (*d_hash) (struct dentry *, struct qstr *); | 13 | int (*d_hash)(const struct dentry *, const struct inode *, |
14 | struct qstr *); | ||
14 | int (*d_compare)(const struct dentry *, const struct inode *, | 15 | int (*d_compare)(const struct dentry *, const struct inode *, |
15 | const struct dentry *, const struct inode *, | 16 | const struct dentry *, const struct inode *, |
16 | unsigned int, const char *, const struct qstr *); | 17 | unsigned int, const char *, const struct qstr *); |
@@ -22,7 +23,7 @@ prototypes: | |||
22 | locking rules: | 23 | locking rules: |
23 | dcache_lock rename_lock ->d_lock may block | 24 | dcache_lock rename_lock ->d_lock may block |
24 | d_revalidate: no no no yes | 25 | d_revalidate: no no no yes |
25 | d_hash no no no yes | 26 | d_hash no no no no |
26 | d_compare: no yes no no | 27 | d_compare: no yes no no |
27 | d_delete: yes no yes no | 28 | d_delete: yes no yes no |
28 | d_release: no no no yes | 29 | d_release: no no no yes |
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index d44511e20828..9fd31940a8ef 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting | |||
@@ -333,3 +333,10 @@ unreferenced dentries, and is now only called when the dentry refcount goes to | |||
333 | .d_compare() calling convention and locking rules are significantly | 333 | .d_compare() calling convention and locking rules are significantly |
334 | changed. Read updated documentation in Documentation/filesystems/vfs.txt (and | 334 | changed. Read updated documentation in Documentation/filesystems/vfs.txt (and |
335 | look at examples of other filesystems) for guidance. | 335 | look at examples of other filesystems) for guidance. |
336 | |||
337 | --- | ||
338 | [mandatory] | ||
339 | |||
340 | .d_hash() calling convention and locking rules are significantly | ||
341 | changed. Read updated documentation in Documentation/filesystems/vfs.txt (and | ||
342 | look at examples of other filesystems) for guidance. | ||
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 250681b8c7cc..69b10ff5ec81 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -847,7 +847,8 @@ defined: | |||
847 | 847 | ||
848 | struct dentry_operations { | 848 | struct dentry_operations { |
849 | int (*d_revalidate)(struct dentry *, struct nameidata *); | 849 | int (*d_revalidate)(struct dentry *, struct nameidata *); |
850 | int (*d_hash)(struct dentry *, struct qstr *); | 850 | int (*d_hash)(const struct dentry *, const struct inode *, |
851 | struct qstr *); | ||
851 | int (*d_compare)(const struct dentry *, const struct inode *, | 852 | int (*d_compare)(const struct dentry *, const struct inode *, |
852 | const struct dentry *, const struct inode *, | 853 | const struct dentry *, const struct inode *, |
853 | unsigned int, const char *, const struct qstr *); | 854 | unsigned int, const char *, const struct qstr *); |
@@ -864,7 +865,10 @@ struct dentry_operations { | |||
864 | 865 | ||
865 | d_hash: called when the VFS adds a dentry to the hash table. The first | 866 | d_hash: called when the VFS adds a dentry to the hash table. The first |
866 | dentry passed to d_hash is the parent directory that the name is | 867 | dentry passed to d_hash is the parent directory that the name is |
867 | to be hashed into. | 868 | to be hashed into. The inode is the dentry's inode. |
869 | |||
870 | Same locking and synchronisation rules as d_compare regarding | ||
871 | what is safe to dereference etc. | ||
868 | 872 | ||
869 | d_compare: called to compare a dentry name with a given name. The first | 873 | d_compare: called to compare a dentry name with a given name. The first |
870 | dentry is the parent of the dentry to be compared, the second is | 874 | dentry is the parent of the dentry to be compared, the second is |