tl.fc_tag = cpu_to_le16(EXT4_FC_TAG_INODE);
        tl.fc_len = cpu_to_le16(inode_len + sizeof(fc_inode.fc_ino));
 
+       ret = -ECANCELED;
        dst = ext4_fc_reserve_space(inode->i_sb,
                        sizeof(tl) + inode_len + sizeof(fc_inode.fc_ino), crc);
        if (!dst)
-               return -ECANCELED;
+               goto err;
 
        if (!ext4_fc_memcpy(inode->i_sb, dst, &tl, sizeof(tl), crc))
-               return -ECANCELED;
+               goto err;
        dst += sizeof(tl);
        if (!ext4_fc_memcpy(inode->i_sb, dst, &fc_inode, sizeof(fc_inode), crc))
-               return -ECANCELED;
+               goto err;
        dst += sizeof(fc_inode);
        if (!ext4_fc_memcpy(inode->i_sb, dst, (u8 *)ext4_raw_inode(&iloc),
                                        inode_len, crc))
-               return -ECANCELED;
-
-       return 0;
+               goto err;
+       ret = 0;
+err:
+       brelse(iloc.bh);
+       return ret;
 }
 
 /*