diff options
author | Al Viro <viro@ZenIV.linux.org.uk> | 2014-11-20 05:19:47 +0000 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2014-11-20 10:29:44 +0000 |
commit | 9265f1d0c7593e3e7e1e94a4a83a6dea34230a35 (patch) | |
tree | 5971e03e7b48769dd708d8fa7d11fb7334854a35 /fs/gfs2 | |
parent | 3cdcf63ed2d169c82d70a506f3569e484cd9e7a0 (diff) |
GFS2: gfs2_dir_get_hash_table(): avoiding deferred vfree() is easy here...
vfree() is allowed under spinlock these days, but it's cheaper when
it doesn't step into deferred case and here it's very easy to avoid.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2')
-rw-r--r-- | fs/gfs2/dir.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c index c247fed4a9a..c5a34f09e22 100644 --- a/fs/gfs2/dir.c +++ b/fs/gfs2/dir.c @@ -370,11 +370,12 @@ static __be64 *gfs2_dir_get_hash_table(struct gfs2_inode *ip) } spin_lock(&inode->i_lock); - if (ip->i_hash_cache) - kvfree(hc); - else + if (likely(!ip->i_hash_cache)) { ip->i_hash_cache = hc; + hc = NULL; + } spin_unlock(&inode->i_lock); + kvfree(hc); return ip->i_hash_cache; } |