ext4_get_link(): fix breakage in RCU mode
[linux-2.6-microblaze.git] / fs / ext4 / symlink.c
index 75bf1f8..645240c 100644 (file)
@@ -92,10 +92,12 @@ static const char *ext4_get_link(struct dentry *dentry, struct inode *inode,
 
        if (!dentry) {
                bh = ext4_getblk(NULL, inode, 0, EXT4_GET_BLOCKS_CACHED_NOWAIT);
-               if (IS_ERR(bh))
-                       return ERR_CAST(bh);
-               if (!bh || !ext4_buffer_uptodate(bh))
+               if (IS_ERR(bh) || !bh)
                        return ERR_PTR(-ECHILD);
+               if (!ext4_buffer_uptodate(bh)) {
+                       brelse(bh);
+                       return ERR_PTR(-ECHILD);
+               }
        } else {
                bh = ext4_bread(NULL, inode, 0, 0);
                if (IS_ERR(bh))