aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Kent <raven@themaw.net>2011-03-24 13:51:14 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2011-03-24 14:54:34 -0400
commitf9398c233e3201874395eea8558eb616fb198648 (patch)
treeadf805206a5bba08a44878dba61256a9dca6120d
parent3c3199852905ceb90a70e98777e71d369a5f0823 (diff)
autofs4 - fix dentry leak in autofs4_expire_direct()
There is a missing dput() when returning from autofs4_expire_direct() when we see that the dentry is already a pending mount. Signed-off-by: Ian Kent <raven@themaw.net> Acked-by: David Howells <dhowells@redhat.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--fs/autofs4/expire.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c
index c896dd6c1ea9..c403abcc725b 100644
--- a/fs/autofs4/expire.c
+++ b/fs/autofs4/expire.c
@@ -290,10 +290,8 @@ struct dentry *autofs4_expire_direct(struct super_block *sb,
290 spin_lock(&sbi->fs_lock); 290 spin_lock(&sbi->fs_lock);
291 ino = autofs4_dentry_ino(root); 291 ino = autofs4_dentry_ino(root);
292 /* No point expiring a pending mount */ 292 /* No point expiring a pending mount */
293 if (ino->flags & AUTOFS_INF_PENDING) { 293 if (ino->flags & AUTOFS_INF_PENDING)
294 spin_unlock(&sbi->fs_lock); 294 goto out;
295 return NULL;
296 }
297 if (!autofs4_direct_busy(mnt, root, timeout, do_now)) { 295 if (!autofs4_direct_busy(mnt, root, timeout, do_now)) {
298 struct autofs_info *ino = autofs4_dentry_ino(root); 296 struct autofs_info *ino = autofs4_dentry_ino(root);
299 ino->flags |= AUTOFS_INF_EXPIRING; 297 ino->flags |= AUTOFS_INF_EXPIRING;
@@ -301,6 +299,7 @@ struct dentry *autofs4_expire_direct(struct super_block *sb,
301 spin_unlock(&sbi->fs_lock); 299 spin_unlock(&sbi->fs_lock);
302 return root; 300 return root;
303 } 301 }
302out:
304 spin_unlock(&sbi->fs_lock); 303 spin_unlock(&sbi->fs_lock);
305 dput(root); 304 dput(root);
306 305