for (i = 0; i < nr_pages; i++) {
                        struct page *page = pvec.pages[i];
                        lock_page(page);
-                       BUG_ON(page->mapping != mapping);
-                       BUG_ON(!PageDirty(page));
+                       f2fs_bug_on(page->mapping != mapping);
+                       f2fs_bug_on(!PageDirty(page));
                        clear_page_dirty_for_io(page);
                        if (f2fs_write_meta_page(page, &wbc)) {
                                unlock_page(page);
 void release_orphan_inode(struct f2fs_sb_info *sbi)
 {
        mutex_lock(&sbi->orphan_inode_mutex);
-       BUG_ON(sbi->n_orphans == 0);
+       f2fs_bug_on(sbi->n_orphans == 0);
        sbi->n_orphans--;
        mutex_unlock(&sbi->orphan_inode_mutex);
 }
                if (orphan->ino == ino) {
                        list_del(&orphan->list);
                        kmem_cache_free(orphan_entry_slab, orphan);
-                       BUG_ON(sbi->n_orphans == 0);
+                       f2fs_bug_on(sbi->n_orphans == 0);
                        sbi->n_orphans--;
                        break;
                }
 static void recover_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
 {
        struct inode *inode = f2fs_iget(sbi->sb, ino);
-       BUG_ON(IS_ERR(inode));
+       f2fs_bug_on(IS_ERR(inode));
        clear_nlink(inode);
 
        /* truncate all the data during iput */
 
        pgoff_t fofs, start_fofs, end_fofs;
        block_t start_blkaddr, end_blkaddr;
 
-       BUG_ON(blk_addr == NEW_ADDR);
+       f2fs_bug_on(blk_addr == NEW_ADDR);
        fofs = start_bidx_of_node(ofs_of_node(dn->node_page), fi) +
                                                        dn->ofs_in_node;
 
        }
 
        /* It does not support data allocation */
-       BUG_ON(create);
+       f2fs_bug_on(create);
 
        if (dn.data_blkaddr != NEW_ADDR && dn.data_blkaddr != NULL_ADDR) {
                int i;
 
        bool room = false;
        int max_slots = 0;
 
-       BUG_ON(level > MAX_DIR_HASH_DEPTH);
+       f2fs_bug_on(level > MAX_DIR_HASH_DEPTH);
 
        nbucket = dir_buckets(level);
        nblock = bucket_blocks(level);
 
 #include <linux/kobject.h>
 #include <linux/sched.h>
 
+#ifdef CONFIG_F2FS_CHECK_FS
+#define f2fs_bug_on(condition) BUG_ON(condition)
+#else
+#define f2fs_bug_on(condition)
+#endif
+
 /*
  * For mount options
  */
                                                blkcnt_t count)
 {
        spin_lock(&sbi->stat_lock);
-       BUG_ON(sbi->total_valid_block_count < (block_t) count);
-       BUG_ON(inode->i_blocks < count);
+       f2fs_bug_on(sbi->total_valid_block_count < (block_t) count);
+       f2fs_bug_on(inode->i_blocks < count);
        inode->i_blocks -= count;
        sbi->total_valid_block_count -= (block_t)count;
        spin_unlock(&sbi->stat_lock);
 {
        spin_lock(&sbi->stat_lock);
 
-       BUG_ON(sbi->total_valid_block_count < count);
-       BUG_ON(sbi->total_valid_node_count < count);
-       BUG_ON(inode->i_blocks < count);
+       f2fs_bug_on(sbi->total_valid_block_count < count);
+       f2fs_bug_on(sbi->total_valid_node_count < count);
+       f2fs_bug_on(inode->i_blocks < count);
 
        inode->i_blocks -= count;
        sbi->total_valid_node_count -= count;
 static inline void inc_valid_inode_count(struct f2fs_sb_info *sbi)
 {
        spin_lock(&sbi->stat_lock);
-       BUG_ON(sbi->total_valid_inode_count == sbi->total_node_count);
+       f2fs_bug_on(sbi->total_valid_inode_count == sbi->total_node_count);
        sbi->total_valid_inode_count++;
        spin_unlock(&sbi->stat_lock);
 }
 static inline int dec_valid_inode_count(struct f2fs_sb_info *sbi)
 {
        spin_lock(&sbi->stat_lock);
-       BUG_ON(!sbi->total_valid_inode_count);
+       f2fs_bug_on(!sbi->total_valid_inode_count);
        sbi->total_valid_inode_count--;
        spin_unlock(&sbi->stat_lock);
        return 0;
                return;
 
        if (unlock) {
-               BUG_ON(!PageLocked(page));
+               f2fs_bug_on(!PageLocked(page));
                unlock_page(page);
        }
        page_cache_release(page);
 
                count = ADDRS_PER_BLOCK;
 
        count -= dn.ofs_in_node;
-       BUG_ON(count < 0);
+       f2fs_bug_on(count < 0);
 
        if (dn.ofs_in_node || IS_INODE(dn.node_page)) {
                truncate_data_blocks_range(&dn, count);
 
                        inode->i_ino == F2FS_META_INO(sbi))
                goto no_delete;
 
-       BUG_ON(atomic_read(&F2FS_I(inode)->dirty_dents));
+       f2fs_bug_on(atomic_read(&F2FS_I(inode)->dirty_dents));
        remove_dirty_dir_inode(inode);
 
        if (inode->i_nlink || is_bad_inode(inode))
 
                }
                e->ni = *ni;
                e->checkpointed = true;
-               BUG_ON(ni->blk_addr == NEW_ADDR);
+               f2fs_bug_on(ni->blk_addr == NEW_ADDR);
        } else if (new_blkaddr == NEW_ADDR) {
                /*
                 * when nid is reallocated,
                 * So, reinitialize it with new information.
                 */
                e->ni = *ni;
-               BUG_ON(ni->blk_addr != NULL_ADDR);
+               f2fs_bug_on(ni->blk_addr != NULL_ADDR);
        }
 
        if (new_blkaddr == NEW_ADDR)
                e->checkpointed = false;
 
        /* sanity check */
-       BUG_ON(nat_get_blkaddr(e) != ni->blk_addr);
-       BUG_ON(nat_get_blkaddr(e) == NULL_ADDR &&
+       f2fs_bug_on(nat_get_blkaddr(e) != ni->blk_addr);
+       f2fs_bug_on(nat_get_blkaddr(e) == NULL_ADDR &&
                        new_blkaddr == NULL_ADDR);
-       BUG_ON(nat_get_blkaddr(e) == NEW_ADDR &&
+       f2fs_bug_on(nat_get_blkaddr(e) == NEW_ADDR &&
                        new_blkaddr == NEW_ADDR);
-       BUG_ON(nat_get_blkaddr(e) != NEW_ADDR &&
+       f2fs_bug_on(nat_get_blkaddr(e) != NEW_ADDR &&
                        nat_get_blkaddr(e) != NULL_ADDR &&
                        new_blkaddr == NEW_ADDR);
 
 
        get_node_info(sbi, dn->nid, &ni);
        if (dn->inode->i_blocks == 0) {
-               BUG_ON(ni.blk_addr != NULL_ADDR);
+               f2fs_bug_on(ni.blk_addr != NULL_ADDR);
                goto invalidate;
        }
-       BUG_ON(ni.blk_addr == NULL_ADDR);
+       f2fs_bug_on(ni.blk_addr == NULL_ADDR);
 
        /* Deallocate node address */
        invalidate_blocks(sbi, ni.blk_addr);
        }
 
        /* 0 is possible, after f2fs_new_inode() is failed */
-       BUG_ON(inode->i_blocks != 0 && inode->i_blocks != 1);
+       f2fs_bug_on(inode->i_blocks != 0 && inode->i_blocks != 1);
        set_new_dnode(&dn, inode, page, page, ino);
        truncate_node(&dn);
        return 0;
        get_node_info(sbi, dn->nid, &old_ni);
 
        /* Reinitialize old_ni with new node page */
-       BUG_ON(old_ni.blk_addr != NULL_ADDR);
+       f2fs_bug_on(old_ni.blk_addr != NULL_ADDR);
        new_ni = old_ni;
        new_ni.ino = dn->inode->i_ino;
        set_node_addr(sbi, &new_ni, NEW_ADDR);
                goto repeat;
        }
 got_it:
-       BUG_ON(nid != nid_of_node(page));
+       f2fs_bug_on(nid != nid_of_node(page));
        mark_page_accessed(page);
        return page;
 }
 
        /* get old block addr of this node page */
        nid = nid_of_node(page);
-       BUG_ON(page->index != nid);
+       f2fs_bug_on(page->index != nid);
 
        get_node_info(sbi, nid, &ni);
 
                        break;
 
                blk_addr = le32_to_cpu(nat_blk->entries[i].block_addr);
-               BUG_ON(blk_addr == NEW_ADDR);
+               f2fs_bug_on(blk_addr == NEW_ADDR);
                if (blk_addr == NULL_ADDR) {
                        if (add_free_nid(nm_i, start_nid, true) < 0)
                                break;
 
        /* We should not use stale free nids created by build_free_nids */
        if (nm_i->fcnt && !sbi->on_build_free_nids) {
-               BUG_ON(list_empty(&nm_i->free_nid_list));
+               f2fs_bug_on(list_empty(&nm_i->free_nid_list));
                list_for_each(this, &nm_i->free_nid_list) {
                        i = list_entry(this, struct free_nid, list);
                        if (i->state == NID_NEW)
                                break;
                }
 
-               BUG_ON(i->state != NID_NEW);
+               f2fs_bug_on(i->state != NID_NEW);
                *nid = i->nid;
                i->state = NID_ALLOC;
                nm_i->fcnt--;
 
        spin_lock(&nm_i->free_nid_list_lock);
        i = __lookup_free_nid_list(nid, &nm_i->free_nid_list);
-       BUG_ON(!i || i->state != NID_ALLOC);
+       f2fs_bug_on(!i || i->state != NID_ALLOC);
        __del_from_free_nid_list(i);
        spin_unlock(&nm_i->free_nid_list_lock);
 }
 
        spin_lock(&nm_i->free_nid_list_lock);
        i = __lookup_free_nid_list(nid, &nm_i->free_nid_list);
-       BUG_ON(!i || i->state != NID_ALLOC);
+       f2fs_bug_on(!i || i->state != NID_ALLOC);
        if (nm_i->fcnt > 2 * MAX_FREE_NIDS) {
                __del_from_free_nid_list(i);
        } else {
                        nat_blk = page_address(page);
                }
 
-               BUG_ON(!nat_blk);
+               f2fs_bug_on(!nat_blk);
                raw_ne = nat_blk->entries[nid - start_nid];
 flush_now:
                new_blkaddr = nat_get_blkaddr(ne);
        /* destroy free nid list */
        spin_lock(&nm_i->free_nid_list_lock);
        list_for_each_entry_safe(i, next_i, &nm_i->free_nid_list, list) {
-               BUG_ON(i->state == NID_ALLOC);
+               f2fs_bug_on(i->state == NID_ALLOC);
                __del_from_free_nid_list(i);
                nm_i->fcnt--;
        }
-       BUG_ON(nm_i->fcnt);
+       f2fs_bug_on(nm_i->fcnt);
        spin_unlock(&nm_i->free_nid_list_lock);
 
        /* destroy nat cache */
                        __del_from_nat_cache(nm_i, e);
                }
        }
-       BUG_ON(nm_i->nat_cnt);
+       f2fs_bug_on(nm_i->nat_cnt);
        write_unlock(&nm_i->nat_tree_lock);
 
        kfree(nm_i->nat_bitmap);
 
        wait_on_page_writeback(dn.node_page);
 
        get_node_info(sbi, dn.nid, &ni);
-       BUG_ON(ni.ino != ino_of_node(page));
-       BUG_ON(ofs_of_node(dn.node_page) != ofs_of_node(page));
+       f2fs_bug_on(ni.ino != ino_of_node(page));
+       f2fs_bug_on(ofs_of_node(dn.node_page) != ofs_of_node(page));
 
        for (; start < end; start++) {
                block_t src, dest;
 
                if (src != dest && dest != NEW_ADDR && dest != NULL_ADDR) {
                        if (src == NULL_ADDR) {
-                               int err = reserve_new_block(&dn);
+                               err = reserve_new_block(&dn);
                                /* We should not get -ENOSPC */
-                               BUG_ON(err);
+                               f2fs_bug_on(err);
                        }
 
                        /* Check the previous node page having this index */
 
        /* step #2: recover data */
        err = recover_data(sbi, &inode_list, CURSEG_WARM_NODE);
-       BUG_ON(!list_empty(&inode_list));
+       f2fs_bug_on(!list_empty(&inode_list));
 out:
        destroy_fsync_dnodes(&inode_list);
        kmem_cache_destroy(fsync_entry_slab);
 
        new_vblocks = se->valid_blocks + del;
        offset = GET_SEGOFF_FROM_SEG0(sbi, blkaddr) & (sbi->blocks_per_seg - 1);
 
-       BUG_ON((new_vblocks >> (sizeof(unsigned short) << 3) ||
+       f2fs_bug_on((new_vblocks >> (sizeof(unsigned short) << 3) ||
                                (new_vblocks > sbi->blocks_per_seg)));
 
        se->valid_blocks = new_vblocks;
        unsigned int segno = GET_SEGNO(sbi, addr);
        struct sit_info *sit_i = SIT_I(sbi);
 
-       BUG_ON(addr == NULL_ADDR);
+       f2fs_bug_on(addr == NULL_ADDR);
        if (addr == NEW_ADDR)
                return;
 
                if (dir == ALLOC_RIGHT) {
                        secno = find_next_zero_bit(free_i->free_secmap,
                                                        TOTAL_SECS(sbi), 0);
-                       BUG_ON(secno >= TOTAL_SECS(sbi));
+                       f2fs_bug_on(secno >= TOTAL_SECS(sbi));
                } else {
                        go_left = 1;
                        left_start = hint - 1;
                }
                left_start = find_next_zero_bit(free_i->free_secmap,
                                                        TOTAL_SECS(sbi), 0);
-               BUG_ON(left_start >= TOTAL_SECS(sbi));
+               f2fs_bug_on(left_start >= TOTAL_SECS(sbi));
                break;
        }
        secno = left_start;
        }
 got_it:
        /* set it as dirty segment in free segmap */
-       BUG_ON(test_bit(segno, free_i->free_segmap));
+       f2fs_bug_on(test_bit(segno, free_i->free_segmap));
        __set_inuse(sbi, segno);
        *newseg = segno;
        write_unlock(&free_i->segmap_lock);
                return __get_segment_type_4(page, p_type);
        }
        /* NR_CURSEG_TYPE(6) logs by default */
-       BUG_ON(sbi->active_logs != NR_CURSEG_TYPE);
+       f2fs_bug_on(sbi->active_logs != NR_CURSEG_TYPE);
        return __get_segment_type_6(page, p_type);
 }
 
        struct f2fs_summary sum;
        struct node_info ni;
 
-       BUG_ON(old_blkaddr == NULL_ADDR);
+       f2fs_bug_on(old_blkaddr == NULL_ADDR);
        get_node_info(sbi, dn->nid, &ni);
        set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version);
 
        /* get current sit block page without lock */
        src_page = get_meta_page(sbi, src_off);
        dst_page = grab_meta_page(sbi, dst_off);
-       BUG_ON(PageDirty(src_page));
+       f2fs_bug_on(PageDirty(src_page));
 
        src_addr = page_address(src_page);
        dst_addr = page_address(dst_page);
 
        return curseg->next_blkoff;
 }
 
+#ifdef CONFIG_F2FS_CHECK_FS
 static inline void check_seg_range(struct f2fs_sb_info *sbi, unsigned int segno)
 {
        unsigned int end_segno = SM_I(sbi)->segment_count - 1;
        BUG_ON(segno > end_segno);
 }
 
-/*
- * This function is used for only debugging.
- * NOTE: In future, we have to remove this function.
- */
 static inline void verify_block_addr(struct f2fs_sb_info *sbi, block_t blk_addr)
 {
        struct f2fs_sm_info *sm_info = SM_I(sbi);
                        valid_blocks++;
        BUG_ON(GET_SIT_VBLOCKS(raw_sit) != valid_blocks);
 }
+#else
+#define check_seg_range(sbi, segno)
+#define verify_block_addr(sbi, blk_addr)
+#define check_block_count(sbi, segno, raw_sit)
+#endif
 
 static inline pgoff_t current_sit_addr(struct f2fs_sb_info *sbi,
                                                unsigned int start)
 
                        alloc_nid_failed(sbi, new_nid);
                        return PTR_ERR(xpage);
                }
-               BUG_ON(new_nid);
+               f2fs_bug_on(new_nid);
        } else {
                struct dnode_of_data dn;
                set_new_dnode(&dn, inode, NULL, NULL, new_nid);