debug.c (31d1b7710262fba12282b24083f20dc76e0efc93) | debug.c (5222595d093ebe80329d38d255d14316257afb3e) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * f2fs debugging statistics 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 * Copyright (c) 2012 Linux Foundation 8 * Copyright (c) 2012 Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- 39 unchanged lines hidden (view full) --- 48 si->ndirty_files = sbi->ndirty_inode[FILE_INODE]; 49 si->nquota_files = sbi->nquota_files; 50 si->ndirty_all = sbi->ndirty_inode[DIRTY_META]; 51 si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES); 52 si->aw_cnt = atomic_read(&sbi->aw_cnt); 53 si->vw_cnt = atomic_read(&sbi->vw_cnt); 54 si->max_aw_cnt = atomic_read(&sbi->max_aw_cnt); 55 si->max_vw_cnt = atomic_read(&sbi->max_vw_cnt); | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * f2fs debugging statistics 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 * Copyright (c) 2012 Linux Foundation 8 * Copyright (c) 2012 Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- 39 unchanged lines hidden (view full) --- 48 si->ndirty_files = sbi->ndirty_inode[FILE_INODE]; 49 si->nquota_files = sbi->nquota_files; 50 si->ndirty_all = sbi->ndirty_inode[DIRTY_META]; 51 si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES); 52 si->aw_cnt = atomic_read(&sbi->aw_cnt); 53 si->vw_cnt = atomic_read(&sbi->vw_cnt); 54 si->max_aw_cnt = atomic_read(&sbi->max_aw_cnt); 55 si->max_vw_cnt = atomic_read(&sbi->max_vw_cnt); |
56 si->nr_dio_read = get_pages(sbi, F2FS_DIO_READ); 57 si->nr_dio_write = get_pages(sbi, F2FS_DIO_WRITE); |
|
56 si->nr_wb_cp_data = get_pages(sbi, F2FS_WB_CP_DATA); 57 si->nr_wb_data = get_pages(sbi, F2FS_WB_DATA); 58 si->nr_rd_data = get_pages(sbi, F2FS_RD_DATA); 59 si->nr_rd_node = get_pages(sbi, F2FS_RD_NODE); 60 si->nr_rd_meta = get_pages(sbi, F2FS_RD_META); 61 if (SM_I(sbi) && SM_I(sbi)->fcc_info) { 62 si->nr_flushed = 63 atomic_read(&SM_I(sbi)->fcc_info->issued_flush); --- 128 unchanged lines hidden (view full) --- 192 193 /* build sit */ 194 si->base_mem += sizeof(struct sit_info); 195 si->base_mem += MAIN_SEGS(sbi) * sizeof(struct seg_entry); 196 si->base_mem += f2fs_bitmap_size(MAIN_SEGS(sbi)); 197 si->base_mem += 2 * SIT_VBLOCK_MAP_SIZE * MAIN_SEGS(sbi); 198 si->base_mem += SIT_VBLOCK_MAP_SIZE * MAIN_SEGS(sbi); 199 si->base_mem += SIT_VBLOCK_MAP_SIZE; | 58 si->nr_wb_cp_data = get_pages(sbi, F2FS_WB_CP_DATA); 59 si->nr_wb_data = get_pages(sbi, F2FS_WB_DATA); 60 si->nr_rd_data = get_pages(sbi, F2FS_RD_DATA); 61 si->nr_rd_node = get_pages(sbi, F2FS_RD_NODE); 62 si->nr_rd_meta = get_pages(sbi, F2FS_RD_META); 63 if (SM_I(sbi) && SM_I(sbi)->fcc_info) { 64 si->nr_flushed = 65 atomic_read(&SM_I(sbi)->fcc_info->issued_flush); --- 128 unchanged lines hidden (view full) --- 194 195 /* build sit */ 196 si->base_mem += sizeof(struct sit_info); 197 si->base_mem += MAIN_SEGS(sbi) * sizeof(struct seg_entry); 198 si->base_mem += f2fs_bitmap_size(MAIN_SEGS(sbi)); 199 si->base_mem += 2 * SIT_VBLOCK_MAP_SIZE * MAIN_SEGS(sbi); 200 si->base_mem += SIT_VBLOCK_MAP_SIZE * MAIN_SEGS(sbi); 201 si->base_mem += SIT_VBLOCK_MAP_SIZE; |
200 if (sbi->segs_per_sec > 1) | 202 if (__is_large_section(sbi)) |
201 si->base_mem += MAIN_SECS(sbi) * sizeof(struct sec_entry); 202 si->base_mem += __bitmap_size(sbi, SIT_BITMAP); 203 204 /* build free segmap */ 205 si->base_mem += sizeof(struct free_segmap_info); 206 si->base_mem += f2fs_bitmap_size(MAIN_SEGS(sbi)); 207 si->base_mem += f2fs_bitmap_size(MAIN_SECS(sbi)); 208 --- 160 unchanged lines hidden (view full) --- 369 si->hit_rbtree); 370 seq_printf(s, " - Hit Ratio: %llu%% (%llu / %llu)\n", 371 !si->total_ext ? 0 : 372 div64_u64(si->hit_total * 100, si->total_ext), 373 si->hit_total, si->total_ext); 374 seq_printf(s, " - Inner Struct Count: tree: %d(%d), node: %d\n", 375 si->ext_tree, si->zombie_tree, si->ext_node); 376 seq_puts(s, "\nBalancing F2FS Async:\n"); | 203 si->base_mem += MAIN_SECS(sbi) * sizeof(struct sec_entry); 204 si->base_mem += __bitmap_size(sbi, SIT_BITMAP); 205 206 /* build free segmap */ 207 si->base_mem += sizeof(struct free_segmap_info); 208 si->base_mem += f2fs_bitmap_size(MAIN_SEGS(sbi)); 209 si->base_mem += f2fs_bitmap_size(MAIN_SECS(sbi)); 210 --- 160 unchanged lines hidden (view full) --- 371 si->hit_rbtree); 372 seq_printf(s, " - Hit Ratio: %llu%% (%llu / %llu)\n", 373 !si->total_ext ? 0 : 374 div64_u64(si->hit_total * 100, si->total_ext), 375 si->hit_total, si->total_ext); 376 seq_printf(s, " - Inner Struct Count: tree: %d(%d), node: %d\n", 377 si->ext_tree, si->zombie_tree, si->ext_node); 378 seq_puts(s, "\nBalancing F2FS Async:\n"); |
379 seq_printf(s, " - DIO (R: %4d, W: %4d)\n", 380 si->nr_dio_read, si->nr_dio_write); |
|
377 seq_printf(s, " - IO_R (Data: %4d, Node: %4d, Meta: %4d\n", 378 si->nr_rd_data, si->nr_rd_node, si->nr_rd_meta); 379 seq_printf(s, " - IO_W (CP: %4d, Data: %4d, Flush: (%4d %4d %4d), " 380 "Discard: (%4d %4d)) cmd: %4d undiscard:%4u\n", 381 si->nr_wb_cp_data, si->nr_wb_data, 382 si->nr_flushing, si->nr_flushed, 383 si->flush_list_empty, 384 si->nr_discarding, si->nr_discarded, --- 54 unchanged lines hidden (view full) --- 439 si->cache_mem >> 10); 440 seq_printf(s, " - paged : %llu KB\n", 441 si->page_mem >> 10); 442 } 443 mutex_unlock(&f2fs_stat_mutex); 444 return 0; 445} 446 | 381 seq_printf(s, " - IO_R (Data: %4d, Node: %4d, Meta: %4d\n", 382 si->nr_rd_data, si->nr_rd_node, si->nr_rd_meta); 383 seq_printf(s, " - IO_W (CP: %4d, Data: %4d, Flush: (%4d %4d %4d), " 384 "Discard: (%4d %4d)) cmd: %4d undiscard:%4u\n", 385 si->nr_wb_cp_data, si->nr_wb_data, 386 si->nr_flushing, si->nr_flushed, 387 si->flush_list_empty, 388 si->nr_discarding, si->nr_discarded, --- 54 unchanged lines hidden (view full) --- 443 si->cache_mem >> 10); 444 seq_printf(s, " - paged : %llu KB\n", 445 si->page_mem >> 10); 446 } 447 mutex_unlock(&f2fs_stat_mutex); 448 return 0; 449} 450 |
447static int stat_open(struct inode *inode, struct file *file) 448{ 449 return single_open(file, stat_show, inode->i_private); 450} | 451DEFINE_SHOW_ATTRIBUTE(stat); |
451 | 452 |
452static const struct file_operations stat_fops = { 453 .owner = THIS_MODULE, 454 .open = stat_open, 455 .read = seq_read, 456 .llseek = seq_lseek, 457 .release = single_release, 458}; 459 | |
460int f2fs_build_stats(struct f2fs_sb_info *sbi) 461{ 462 struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi); 463 struct f2fs_stat_info *si; 464 int i; 465 466 si = f2fs_kzalloc(sbi, sizeof(struct f2fs_stat_info), GFP_KERNEL); 467 if (!si) --- 37 unchanged lines hidden (view full) --- 505void f2fs_destroy_stats(struct f2fs_sb_info *sbi) 506{ 507 struct f2fs_stat_info *si = F2FS_STAT(sbi); 508 509 mutex_lock(&f2fs_stat_mutex); 510 list_del(&si->stat_list); 511 mutex_unlock(&f2fs_stat_mutex); 512 | 453int f2fs_build_stats(struct f2fs_sb_info *sbi) 454{ 455 struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi); 456 struct f2fs_stat_info *si; 457 int i; 458 459 si = f2fs_kzalloc(sbi, sizeof(struct f2fs_stat_info), GFP_KERNEL); 460 if (!si) --- 37 unchanged lines hidden (view full) --- 498void f2fs_destroy_stats(struct f2fs_sb_info *sbi) 499{ 500 struct f2fs_stat_info *si = F2FS_STAT(sbi); 501 502 mutex_lock(&f2fs_stat_mutex); 503 list_del(&si->stat_list); 504 mutex_unlock(&f2fs_stat_mutex); 505 |
513 kfree(si); | 506 kvfree(si); |
514} 515 516int __init f2fs_create_root_stats(void) 517{ 518 struct dentry *file; 519 520 f2fs_debugfs_root = debugfs_create_dir("f2fs", NULL); 521 if (!f2fs_debugfs_root) --- 21 unchanged lines hidden --- | 507} 508 509int __init f2fs_create_root_stats(void) 510{ 511 struct dentry *file; 512 513 f2fs_debugfs_root = debugfs_create_dir("f2fs", NULL); 514 if (!f2fs_debugfs_root) --- 21 unchanged lines hidden --- |