return status;
        }
 
-       return __ocfs2_mknod_locked(dir, inode, dev, new_fe_bh,
+       status = __ocfs2_mknod_locked(dir, inode, dev, new_fe_bh,
                                    parent_fe_bh, handle, inode_ac,
                                    fe_blkno, suballoc_loc, suballoc_bit);
+       if (status < 0) {
+               u64 bg_blkno = ocfs2_which_suballoc_group(fe_blkno, suballoc_bit);
+               int tmp = ocfs2_free_suballoc_bits(handle, inode_ac->ac_inode,
+                               inode_ac->ac_bh, suballoc_bit, bg_blkno, 1);
+               if (tmp)
+                       mlog_errno(tmp);
+       }
+
+       return status;
 }
 
 static int ocfs2_mkdir(struct inode *dir,