aboutsummaryrefslogtreecommitdiffstats
path: root/fs/sysfs/dir.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/sysfs/dir.c')
-rw-r--r--fs/sysfs/dir.c20
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)
297static int sysfs_dentry_revalidate(struct dentry *dentry, unsigned int flags) 297static 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