diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-03-01 18:55:04 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-03-01 18:55:04 -0500 |
commit | 25c4e6c3f0c14d1575aa488ff4ca47e045ae51a0 (patch) | |
tree | 4ecf60124fd87fbd655393a081beecaf88746eea /fs/f2fs/debug.c | |
parent | 6053dc981449718d90a429933e99b441e1adaea6 (diff) | |
parent | 900f736251c81886f3064c9d489c85eddee921b7 (diff) |
Merge tag 'for-f2fs-4.11' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs
Pull f2fs updates from Jaegeuk Kim:
"This round introduces several interesting features such as on-disk NAT
bitmaps, IO alignment, and a discard thread. And it includes a couple
of major bug fixes as below.
Enhancements:
- introduce on-disk bitmaps to avoid scanning NAT blocks when getting
free nids
- support IO alignment to prepare open-channel SSD integration in
future
- introduce a discard thread to avoid long latency during checkpoint
and fstrim
- use SSR for warm node and enable inline_xattr by default
- introduce in-memory bitmaps to check FS consistency for debugging
- improve write_begin by avoiding needless read IO
Bug fixes:
- fix broken zone_reset behavior for SMR drive
- fix wrong victim selection policy during GC
- fix missing behavior when preparing discard commands
- fix bugs in atomic write support and fiemap
- workaround to handle multiple f2fs_add_link calls having same name
... and it includes a bunch of clean-up patches as well"
* tag 'for-f2fs-4.11' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs: (97 commits)
f2fs: avoid to flush nat journal entries
f2fs: avoid to issue redundant discard commands
f2fs: fix a plint compile warning
f2fs: add f2fs_drop_inode tracepoint
f2fs: Fix zoned block device support
f2fs: remove redundant set_page_dirty()
f2fs: fix to enlarge size of write_io_dummy mempool
f2fs: fix memory leak of write_io_dummy mempool during umount
f2fs: fix to update F2FS_{CP_}WB_DATA count correctly
f2fs: use MAX_FREE_NIDS for the free nids target
f2fs: introduce free nid bitmap
f2fs: new helper cur_cp_crc() getting crc in f2fs_checkpoint
f2fs: update the comment of default nr_pages to skipping
f2fs: drop the duplicate pval in f2fs_getxattr
f2fs: Don't update the xattr data that same as the exist
f2fs: kill __is_extent_same
f2fs: avoid bggc->fggc when enough free segments are avaliable after cp
f2fs: select target segment with closer temperature in SSR mode
f2fs: show simple call stack in fault injection message
f2fs: no need lock_op in f2fs_write_inline_data
...
Diffstat (limited to 'fs/f2fs/debug.c')
-rw-r--r-- | fs/f2fs/debug.c | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c index fbd5184140d0..a77df377e2e8 100644 --- a/fs/f2fs/debug.c +++ b/fs/f2fs/debug.c | |||
@@ -50,8 +50,16 @@ static void update_general_status(struct f2fs_sb_info *sbi) | |||
50 | si->ndirty_files = sbi->ndirty_inode[FILE_INODE]; | 50 | si->ndirty_files = sbi->ndirty_inode[FILE_INODE]; |
51 | si->ndirty_all = sbi->ndirty_inode[DIRTY_META]; | 51 | si->ndirty_all = sbi->ndirty_inode[DIRTY_META]; |
52 | si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES); | 52 | si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES); |
53 | si->aw_cnt = atomic_read(&sbi->aw_cnt); | ||
54 | si->max_aw_cnt = atomic_read(&sbi->max_aw_cnt); | ||
53 | si->nr_wb_cp_data = get_pages(sbi, F2FS_WB_CP_DATA); | 55 | si->nr_wb_cp_data = get_pages(sbi, F2FS_WB_CP_DATA); |
54 | si->nr_wb_data = get_pages(sbi, F2FS_WB_DATA); | 56 | si->nr_wb_data = get_pages(sbi, F2FS_WB_DATA); |
57 | if (SM_I(sbi) && SM_I(sbi)->fcc_info) | ||
58 | si->nr_flush = | ||
59 | atomic_read(&SM_I(sbi)->fcc_info->submit_flush); | ||
60 | if (SM_I(sbi) && SM_I(sbi)->dcc_info) | ||
61 | si->nr_discard = | ||
62 | atomic_read(&SM_I(sbi)->dcc_info->submit_discard); | ||
55 | si->total_count = (int)sbi->user_block_count / sbi->blocks_per_seg; | 63 | si->total_count = (int)sbi->user_block_count / sbi->blocks_per_seg; |
56 | si->rsvd_segs = reserved_segments(sbi); | 64 | si->rsvd_segs = reserved_segments(sbi); |
57 | si->overp_segs = overprovision_segments(sbi); | 65 | si->overp_segs = overprovision_segments(sbi); |
@@ -62,6 +70,8 @@ static void update_general_status(struct f2fs_sb_info *sbi) | |||
62 | si->inline_xattr = atomic_read(&sbi->inline_xattr); | 70 | si->inline_xattr = atomic_read(&sbi->inline_xattr); |
63 | si->inline_inode = atomic_read(&sbi->inline_inode); | 71 | si->inline_inode = atomic_read(&sbi->inline_inode); |
64 | si->inline_dir = atomic_read(&sbi->inline_dir); | 72 | si->inline_dir = atomic_read(&sbi->inline_dir); |
73 | si->append = sbi->im[APPEND_INO].ino_num; | ||
74 | si->update = sbi->im[UPDATE_INO].ino_num; | ||
65 | si->orphans = sbi->im[ORPHAN_INO].ino_num; | 75 | si->orphans = sbi->im[ORPHAN_INO].ino_num; |
66 | si->utilization = utilization(sbi); | 76 | si->utilization = utilization(sbi); |
67 | 77 | ||
@@ -183,6 +193,9 @@ static void update_mem_info(struct f2fs_sb_info *sbi) | |||
183 | /* build nm */ | 193 | /* build nm */ |
184 | si->base_mem += sizeof(struct f2fs_nm_info); | 194 | si->base_mem += sizeof(struct f2fs_nm_info); |
185 | si->base_mem += __bitmap_size(sbi, NAT_BITMAP); | 195 | si->base_mem += __bitmap_size(sbi, NAT_BITMAP); |
196 | si->base_mem += (NM_I(sbi)->nat_bits_blocks << F2FS_BLKSIZE_BITS); | ||
197 | si->base_mem += NM_I(sbi)->nat_blocks * NAT_ENTRY_BITMAP_SIZE; | ||
198 | si->base_mem += NM_I(sbi)->nat_blocks / 8; | ||
186 | 199 | ||
187 | get_cache: | 200 | get_cache: |
188 | si->cache_mem = 0; | 201 | si->cache_mem = 0; |
@@ -192,8 +205,10 @@ get_cache: | |||
192 | si->cache_mem += sizeof(struct f2fs_gc_kthread); | 205 | si->cache_mem += sizeof(struct f2fs_gc_kthread); |
193 | 206 | ||
194 | /* build merge flush thread */ | 207 | /* build merge flush thread */ |
195 | if (SM_I(sbi)->cmd_control_info) | 208 | if (SM_I(sbi)->fcc_info) |
196 | si->cache_mem += sizeof(struct flush_cmd_control); | 209 | si->cache_mem += sizeof(struct flush_cmd_control); |
210 | if (SM_I(sbi)->dcc_info) | ||
211 | si->cache_mem += sizeof(struct discard_cmd_control); | ||
197 | 212 | ||
198 | /* free nids */ | 213 | /* free nids */ |
199 | si->cache_mem += (NM_I(sbi)->nid_cnt[FREE_NID_LIST] + | 214 | si->cache_mem += (NM_I(sbi)->nid_cnt[FREE_NID_LIST] + |
@@ -254,8 +269,8 @@ static int stat_show(struct seq_file *s, void *v) | |||
254 | si->inline_inode); | 269 | si->inline_inode); |
255 | seq_printf(s, " - Inline_dentry Inode: %u\n", | 270 | seq_printf(s, " - Inline_dentry Inode: %u\n", |
256 | si->inline_dir); | 271 | si->inline_dir); |
257 | seq_printf(s, " - Orphan Inode: %u\n", | 272 | seq_printf(s, " - Orphan/Append/Update Inode: %u, %u, %u\n", |
258 | si->orphans); | 273 | si->orphans, si->append, si->update); |
259 | seq_printf(s, "\nMain area: %d segs, %d secs %d zones\n", | 274 | seq_printf(s, "\nMain area: %d segs, %d secs %d zones\n", |
260 | si->main_area_segs, si->main_area_sections, | 275 | si->main_area_segs, si->main_area_sections, |
261 | si->main_area_zones); | 276 | si->main_area_zones); |
@@ -314,8 +329,11 @@ static int stat_show(struct seq_file *s, void *v) | |||
314 | seq_printf(s, " - Inner Struct Count: tree: %d(%d), node: %d\n", | 329 | seq_printf(s, " - Inner Struct Count: tree: %d(%d), node: %d\n", |
315 | si->ext_tree, si->zombie_tree, si->ext_node); | 330 | si->ext_tree, si->zombie_tree, si->ext_node); |
316 | seq_puts(s, "\nBalancing F2FS Async:\n"); | 331 | seq_puts(s, "\nBalancing F2FS Async:\n"); |
317 | seq_printf(s, " - inmem: %4d, wb_cp_data: %4d, wb_data: %4d\n", | 332 | seq_printf(s, " - IO (CP: %4d, Data: %4d, Flush: %4d, Discard: %4d)\n", |
318 | si->inmem_pages, si->nr_wb_cp_data, si->nr_wb_data); | 333 | si->nr_wb_cp_data, si->nr_wb_data, |
334 | si->nr_flush, si->nr_discard); | ||
335 | seq_printf(s, " - inmem: %4d, atomic IO: %4d (Max. %4d)\n", | ||
336 | si->inmem_pages, si->aw_cnt, si->max_aw_cnt); | ||
319 | seq_printf(s, " - nodes: %4d in %4d\n", | 337 | seq_printf(s, " - nodes: %4d in %4d\n", |
320 | si->ndirty_node, si->node_pages); | 338 | si->ndirty_node, si->node_pages); |
321 | seq_printf(s, " - dents: %4d in dirs:%4d (%4d)\n", | 339 | seq_printf(s, " - dents: %4d in dirs:%4d (%4d)\n", |
@@ -414,6 +432,9 @@ int f2fs_build_stats(struct f2fs_sb_info *sbi) | |||
414 | atomic_set(&sbi->inline_dir, 0); | 432 | atomic_set(&sbi->inline_dir, 0); |
415 | atomic_set(&sbi->inplace_count, 0); | 433 | atomic_set(&sbi->inplace_count, 0); |
416 | 434 | ||
435 | atomic_set(&sbi->aw_cnt, 0); | ||
436 | atomic_set(&sbi->max_aw_cnt, 0); | ||
437 | |||
417 | mutex_lock(&f2fs_stat_mutex); | 438 | mutex_lock(&f2fs_stat_mutex); |
418 | list_add_tail(&si->stat_list, &f2fs_stat_list); | 439 | list_add_tail(&si->stat_list, &f2fs_stat_list); |
419 | mutex_unlock(&f2fs_stat_mutex); | 440 | mutex_unlock(&f2fs_stat_mutex); |