GFS2: gfs2_dir_get_hash_table(): avoiding deferred vfree() is easy here...
authorAl Viro <viro@ZenIV.linux.org.uk>
Thu, 20 Nov 2014 05:19:47 +0000 (05:19 +0000)
committerSteven Whitehouse <swhiteho@redhat.com>
Thu, 20 Nov 2014 10:29:44 +0000 (10:29 +0000)
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>
fs/gfs2/dir.c

index c247fed4a9a63ee2d1dc4460cae91ec57420c850..c5a34f09e228dadc5d9d4b0e316280f0bc98ccb8 100644 (file)
@@ -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;
 }