Browse Source

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>
Al Viro 10 years ago
parent
commit
9265f1d0c7
1 changed files with 4 additions and 3 deletions
  1. 4 3
      fs/gfs2/dir.c

+ 4 - 3
fs/gfs2/dir.c

@@ -370,11 +370,12 @@ static __be64 *gfs2_dir_get_hash_table(struct gfs2_inode *ip)
 	}
 	}
 
 
 	spin_lock(&inode->i_lock);
 	spin_lock(&inode->i_lock);
-	if (ip->i_hash_cache)
-		kvfree(hc);
-	else
+	if (likely(!ip->i_hash_cache)) {
 		ip->i_hash_cache = hc;
 		ip->i_hash_cache = hc;
+		hc = NULL;
+	}
 	spin_unlock(&inode->i_lock);
 	spin_unlock(&inode->i_lock);
+	kvfree(hc);
 
 
 	return ip->i_hash_cache;
 	return ip->i_hash_cache;
 }
 }