f2fs: calculate the f2fs_stat_info into base_mem
[sfrench/cifs-2.6.git] / fs / f2fs / debug.c
index fbd5184140d086df541a2583ccc5d1de74054e58..ef1179df05d90d3525db2b4240400cde9f05b914 100644 (file)
@@ -50,8 +50,16 @@ static void update_general_status(struct f2fs_sb_info *sbi)
        si->ndirty_files = sbi->ndirty_inode[FILE_INODE];
        si->ndirty_all = sbi->ndirty_inode[DIRTY_META];
        si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES);
+       si->aw_cnt = atomic_read(&sbi->aw_cnt);
+       si->max_aw_cnt = atomic_read(&sbi->max_aw_cnt);
        si->nr_wb_cp_data = get_pages(sbi, F2FS_WB_CP_DATA);
        si->nr_wb_data = get_pages(sbi, F2FS_WB_DATA);
+       if (SM_I(sbi) && SM_I(sbi)->fcc_info)
+               si->nr_flush =
+                       atomic_read(&SM_I(sbi)->fcc_info->submit_flush);
+       if (SM_I(sbi) && SM_I(sbi)->dcc_info)
+               si->nr_discard =
+                       atomic_read(&SM_I(sbi)->dcc_info->submit_discard);
        si->total_count = (int)sbi->user_block_count / sbi->blocks_per_seg;
        si->rsvd_segs = reserved_segments(sbi);
        si->overp_segs = overprovision_segments(sbi);
@@ -62,6 +70,8 @@ static void update_general_status(struct f2fs_sb_info *sbi)
        si->inline_xattr = atomic_read(&sbi->inline_xattr);
        si->inline_inode = atomic_read(&sbi->inline_inode);
        si->inline_dir = atomic_read(&sbi->inline_dir);
+       si->append = sbi->im[APPEND_INO].ino_num;
+       si->update = sbi->im[UPDATE_INO].ino_num;
        si->orphans = sbi->im[ORPHAN_INO].ino_num;
        si->utilization = utilization(sbi);
 
@@ -146,7 +156,11 @@ static void update_mem_info(struct f2fs_sb_info *sbi)
        if (si->base_mem)
                goto get_cache;
 
-       si->base_mem = sizeof(struct f2fs_sb_info) + sbi->sb->s_blocksize;
+       /* build stat */
+       si->base_mem = sizeof(struct f2fs_stat_info);
+
+       /* build superblock */
+       si->base_mem += sizeof(struct f2fs_sb_info) + sbi->sb->s_blocksize;
        si->base_mem += 2 * sizeof(struct f2fs_inode_info);
        si->base_mem += sizeof(*sbi->ckpt);
        si->base_mem += sizeof(struct percpu_counter) * NR_COUNT_TYPE;
@@ -183,6 +197,10 @@ static void update_mem_info(struct f2fs_sb_info *sbi)
        /* build nm */
        si->base_mem += sizeof(struct f2fs_nm_info);
        si->base_mem += __bitmap_size(sbi, NAT_BITMAP);
+       si->base_mem += (NM_I(sbi)->nat_bits_blocks << F2FS_BLKSIZE_BITS);
+       si->base_mem += NM_I(sbi)->nat_blocks * NAT_ENTRY_BITMAP_SIZE;
+       si->base_mem += NM_I(sbi)->nat_blocks / 8;
+       si->base_mem += NM_I(sbi)->nat_blocks * sizeof(unsigned short);
 
 get_cache:
        si->cache_mem = 0;
@@ -192,8 +210,10 @@ get_cache:
                si->cache_mem += sizeof(struct f2fs_gc_kthread);
 
        /* build merge flush thread */
-       if (SM_I(sbi)->cmd_control_info)
+       if (SM_I(sbi)->fcc_info)
                si->cache_mem += sizeof(struct flush_cmd_control);
+       if (SM_I(sbi)->dcc_info)
+               si->cache_mem += sizeof(struct discard_cmd_control);
 
        /* free nids */
        si->cache_mem += (NM_I(sbi)->nid_cnt[FREE_NID_LIST] +
@@ -254,8 +274,8 @@ static int stat_show(struct seq_file *s, void *v)
                           si->inline_inode);
                seq_printf(s, "  - Inline_dentry Inode: %u\n",
                           si->inline_dir);
-               seq_printf(s, "  - Orphan Inode: %u\n",
-                          si->orphans);
+               seq_printf(s, "  - Orphan/Append/Update Inode: %u, %u, %u\n",
+                          si->orphans, si->append, si->update);
                seq_printf(s, "\nMain area: %d segs, %d secs %d zones\n",
                           si->main_area_segs, si->main_area_sections,
                           si->main_area_zones);
@@ -314,8 +334,11 @@ static int stat_show(struct seq_file *s, void *v)
                seq_printf(s, "  - Inner Struct Count: tree: %d(%d), node: %d\n",
                                si->ext_tree, si->zombie_tree, si->ext_node);
                seq_puts(s, "\nBalancing F2FS Async:\n");
-               seq_printf(s, "  - inmem: %4d, wb_cp_data: %4d, wb_data: %4d\n",
-                          si->inmem_pages, si->nr_wb_cp_data, si->nr_wb_data);
+               seq_printf(s, "  - IO (CP: %4d, Data: %4d, Flush: %4d, Discard: %4d)\n",
+                          si->nr_wb_cp_data, si->nr_wb_data,
+                          si->nr_flush, si->nr_discard);
+               seq_printf(s, "  - inmem: %4d, atomic IO: %4d (Max. %4d)\n",
+                          si->inmem_pages, si->aw_cnt, si->max_aw_cnt);
                seq_printf(s, "  - nodes: %4d in %4d\n",
                           si->ndirty_node, si->node_pages);
                seq_printf(s, "  - dents: %4d in dirs:%4d (%4d)\n",
@@ -414,6 +437,9 @@ int f2fs_build_stats(struct f2fs_sb_info *sbi)
        atomic_set(&sbi->inline_dir, 0);
        atomic_set(&sbi->inplace_count, 0);
 
+       atomic_set(&sbi->aw_cnt, 0);
+       atomic_set(&sbi->max_aw_cnt, 0);
+
        mutex_lock(&f2fs_stat_mutex);
        list_add_tail(&si->stat_list, &f2fs_stat_list);
        mutex_unlock(&f2fs_stat_mutex);