diff options
| author | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:49:57 -0500 |
|---|---|---|
| committer | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:50:29 -0500 |
| commit | 34286d6662308d82aed891852d04c7c3a2649b16 (patch) | |
| tree | c4b7311404d302e7cb94df7a4690298e1059910a /fs/sysfs/dir.c | |
| parent | 44a7d7a878c9cbb74f236ea755b25b6b2e26a9a9 (diff) | |
fs: rcu-walk aware d_revalidate method
Require filesystems be aware of .d_revalidate being called in rcu-walk
mode (nd->flags & LOOKUP_RCU). For now do a simple push down, returning
-ECHILD from all implementations.
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Diffstat (limited to 'fs/sysfs/dir.c')
| -rw-r--r-- | fs/sysfs/dir.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c index 3e076caa8daf..ea9120a830d8 100644 --- a/fs/sysfs/dir.c +++ b/fs/sysfs/dir.c | |||
| @@ -239,9 +239,13 @@ static int sysfs_dentry_delete(const struct dentry *dentry) | |||
| 239 | 239 | ||
| 240 | static int sysfs_dentry_revalidate(struct dentry *dentry, struct nameidata *nd) | 240 | static int sysfs_dentry_revalidate(struct dentry *dentry, struct nameidata *nd) |
| 241 | { | 241 | { |
| 242 | struct sysfs_dirent *sd = dentry->d_fsdata; | 242 | struct sysfs_dirent *sd; |
| 243 | int is_dir; | 243 | int is_dir; |
| 244 | 244 | ||
| 245 | if (nd->flags & LOOKUP_RCU) | ||
| 246 | return -ECHILD; | ||
| 247 | |||
| 248 | sd = dentry->d_fsdata; | ||
| 245 | mutex_lock(&sysfs_mutex); | 249 | mutex_lock(&sysfs_mutex); |
| 246 | 250 | ||
| 247 | /* The sysfs dirent has been deleted */ | 251 | /* The sysfs dirent has been deleted */ |
