trace_ext4_ext_map_blocks_exit(inode, flags, map,
                                       err ? err : allocated);
-       ext4_es_list_add(inode);
        return err ? err : allocated;
 }
 
                error = ext4_fill_fiemap_extents(inode, start_blk,
                                                 len_blks, fieinfo);
        }
-       ext4_es_list_add(inode);
        return error;
 }
 
 
        trace_ext4_es_find_delayed_extent_range_exit(inode, es);
 }
 
-void ext4_es_list_add(struct inode *inode)
+static void ext4_es_list_add(struct inode *inode)
 {
        struct ext4_inode_info *ei = EXT4_I(inode);
        struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
        spin_unlock(&sbi->s_es_lock);
 }
 
-void ext4_es_list_del(struct inode *inode)
+static void ext4_es_list_del(struct inode *inode)
 {
        struct ext4_inode_info *ei = EXT4_I(inode);
        struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
         * We don't count delayed extent because we never try to reclaim them
         */
        if (!ext4_es_is_delayed(es)) {
-               EXT4_I(inode)->i_es_shk_nr++;
+               if (!EXT4_I(inode)->i_es_shk_nr++)
+                       ext4_es_list_add(inode);
                percpu_counter_inc(&EXT4_SB(inode->i_sb)->
                                        s_es_stats.es_stats_shk_cnt);
        }
        /* Decrease the shrink counter when this es is not delayed */
        if (!ext4_es_is_delayed(es)) {
                BUG_ON(EXT4_I(inode)->i_es_shk_nr == 0);
-               EXT4_I(inode)->i_es_shk_nr--;
+               if (!--EXT4_I(inode)->i_es_shk_nr)
+                       ext4_es_list_del(inode);
                percpu_counter_dec(&EXT4_SB(inode->i_sb)->
                                        s_es_stats.es_stats_shk_cnt);
        }
 
 
 extern int ext4_es_register_shrinker(struct ext4_sb_info *sbi);
 extern void ext4_es_unregister_shrinker(struct ext4_sb_info *sbi);
-extern void ext4_es_list_add(struct inode *inode);
-extern void ext4_es_list_del(struct inode *inode);
 
 #endif /* _EXT4_EXTENTS_STATUS_H */
 
 
        /* Lookup extent status tree firstly */
        if (ext4_es_lookup_extent(inode, map->m_lblk, &es)) {
-               ext4_es_list_add(inode);
                if (ext4_es_is_written(&es) || ext4_es_is_unwritten(&es)) {
                        map->m_pblk = ext4_es_pblock(&es) +
                                        map->m_lblk - es.es_lblk;
 
        /* Lookup extent status tree firstly */
        if (ext4_es_lookup_extent(inode, iblock, &es)) {
-               ext4_es_list_add(inode);
                if (ext4_es_is_hole(&es)) {
                        retval = 0;
                        down_read(&EXT4_I(inode)->i_data_sem);
 
        memswap(&ei1->i_disksize, &ei2->i_disksize, sizeof(ei1->i_disksize));
        ext4_es_remove_extent(inode1, 0, EXT_MAX_BLOCKS);
        ext4_es_remove_extent(inode2, 0, EXT_MAX_BLOCKS);
-       ext4_es_list_del(inode1);
-       ext4_es_list_del(inode2);
 
        isize = i_size_read(inode1);
        i_size_write(inode1, i_size_read(inode2));
 
        dquot_drop(inode);
        ext4_discard_preallocations(inode);
        ext4_es_remove_extent(inode, 0, EXT_MAX_BLOCKS);
-       ext4_es_list_del(inode);
        if (EXT4_I(inode)->jinode) {
                jbd2_journal_release_jbd_inode(EXT4_JOURNAL(inode),
                                               EXT4_I(inode)->jinode);