diff options
author | Miklos Szeredi <mszeredi@suse.cz> | 2013-09-05 09:44:39 (GMT) |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-09-05 20:23:51 (GMT) |
commit | 1191a2bdf012147c33e5fa95255974a3f7bf6e2f (patch) | |
tree | 7a048ca9a96611474270e6a158ee0f14496d8572 | |
parent | ba81238076d368b9bb78a7fbf6c621b49d4d602f (diff) | |
download | linux-1191a2bdf012147c33e5fa95255974a3f7bf6e2f.tar.xz |
gfs2: use check_submounts_and_drop()
Do have_submounts(), shrink_dcache_parent() and d_drop() atomically.
check_submounts_and_drop() can deal with negative dentries and
non-directories as well.
Non-directories can also be mounted on. And just like directories we don't
want these to disappear with invalidation.
Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
CC: Steven Whitehouse <swhiteho@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | fs/gfs2/dentry.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/fs/gfs2/dentry.c b/fs/gfs2/dentry.c index f2448ab..d3a5d4e 100644 --- a/fs/gfs2/dentry.c +++ b/fs/gfs2/dentry.c @@ -93,12 +93,9 @@ invalid_gunlock: if (!had_lock) gfs2_glock_dq_uninit(&d_gh); invalid: - if (inode && S_ISDIR(inode->i_mode)) { - if (have_submounts(dentry)) - goto valid; - shrink_dcache_parent(dentry); - } - d_drop(dentry); + if (check_submounts_and_drop(dentry) != 0) + goto valid; + dput(parent); return 0; |