diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/sysfs/dir.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c index 99ec5b40e977..4d83cedb9fcb 100644 --- a/fs/sysfs/dir.c +++ b/fs/sysfs/dir.c | |||
@@ -297,7 +297,6 @@ static int sysfs_dentry_delete(const struct dentry *dentry) | |||
297 | static int sysfs_dentry_revalidate(struct dentry *dentry, unsigned int flags) | 297 | static int sysfs_dentry_revalidate(struct dentry *dentry, unsigned int flags) |
298 | { | 298 | { |
299 | struct sysfs_dirent *sd; | 299 | struct sysfs_dirent *sd; |
300 | int is_dir; | ||
301 | int type; | 300 | int type; |
302 | 301 | ||
303 | if (flags & LOOKUP_RCU) | 302 | if (flags & LOOKUP_RCU) |
@@ -341,18 +340,15 @@ out_bad: | |||
341 | * is performed at its new name the dentry will be readded | 340 | * is performed at its new name the dentry will be readded |
342 | * to the dcache hashes. | 341 | * to the dcache hashes. |
343 | */ | 342 | */ |
344 | is_dir = (sysfs_type(sd) == SYSFS_DIR); | ||
345 | mutex_unlock(&sysfs_mutex); | 343 | mutex_unlock(&sysfs_mutex); |
346 | if (is_dir) { | 344 | |
347 | /* If we have submounts we must allow the vfs caches | 345 | /* If we have submounts we must allow the vfs caches |
348 | * to lie about the state of the filesystem to prevent | 346 | * to lie about the state of the filesystem to prevent |
349 | * leaks and other nasty things. | 347 | * leaks and other nasty things. |
350 | */ | 348 | */ |
351 | if (have_submounts(dentry)) | 349 | if (check_submounts_and_drop(dentry) != 0) |
352 | goto out_valid; | 350 | goto out_valid; |
353 | shrink_dcache_parent(dentry); | 351 | |
354 | } | ||
355 | d_drop(dentry); | ||
356 | return 0; | 352 | return 0; |
357 | } | 353 | } |
358 | 354 | ||