int status;
        struct inode *inode = NULL;
        struct buffer_head *bh = NULL;
+       struct ocfs2_dinode *di;
+       struct ocfs2_truncate_log *tl;
+       unsigned int tl_count;
 
        inode = ocfs2_get_system_file_inode(osb,
                                           TRUNCATE_LOG_SYSTEM_INODE,
                goto bail;
        }
 
+       di = (struct ocfs2_dinode *)bh->b_data;
+       tl = &di->id2.i_dealloc;
+       tl_count = le16_to_cpu(tl->tl_count);
+       if (unlikely(tl_count > ocfs2_truncate_recs_per_inode(osb->sb) ||
+                    tl_count == 0)) {
+               status = -EFSCORRUPTED;
+               iput(inode);
+               brelse(bh);
+               mlog_errno(status);
+               goto bail;
+       }
+
        *tl_inode = inode;
        *tl_bh    = bh;
 bail: