diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-18 11:17:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-04-18 11:17:20 -0400 |
commit | 06a60deca87dba8e2c186ea7f12ea87d6785188e (patch) | |
tree | 2a6c8de6a7b110d13a1c1e3fc07cdc9065dfd749 /fs/f2fs/debug.c | |
parent | d6a24d0640d609138a4e40a4ce9fd9fe7859e24c (diff) | |
parent | 10027551ccf5459cc771c31ac8bc8e5cc8db45f8 (diff) |
Merge tag 'for-f2fs-4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs
Pull f2fs updates from Jaegeuk Kim:
"New features:
- in-memory extent_cache
- fs_shutdown to test power-off-recovery
- use inline_data to store symlink path
- show f2fs as a non-misc filesystem
Major fixes:
- avoid CPU stalls on sync_dirty_dir_inodes
- fix some power-off-recovery procedure
- fix handling of broken symlink correctly
- fix missing dot and dotdot made by sudden power cuts
- handle wrong data index during roll-forward recovery
- preallocate data blocks for direct_io
... and a bunch of minor bug fixes and cleanups"
* tag 'for-f2fs-4.1' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs: (71 commits)
f2fs: pass checkpoint reason on roll-forward recovery
f2fs: avoid abnormal behavior on broken symlink
f2fs: flush symlink path to avoid broken symlink after POR
f2fs: change 0 to false for bool type
f2fs: do not recover wrong data index
f2fs: do not increase link count during recovery
f2fs: assign parent's i_mode for empty dir
f2fs: add F2FS_INLINE_DOTS to recover missing dot dentries
f2fs: fix mismatching lock and unlock pages for roll-forward recovery
f2fs: fix sparse warnings
f2fs: limit b_size of mapped bh in f2fs_map_bh
f2fs: persist system.advise into on-disk inode
f2fs: avoid NULL pointer dereference in f2fs_xattr_advise_get
f2fs: preallocate fallocated blocks for direct IO
f2fs: enable inline data by default
f2fs: preserve extent info for extent cache
f2fs: initialize extent tree with on-disk extent info of inode
f2fs: introduce __{find,grab}_extent_tree
f2fs: split set_data_blkaddr from f2fs_update_extent_cache
f2fs: enable fast symlink by utilizing inline data
...
Diffstat (limited to 'fs/f2fs/debug.c')
-rw-r--r-- | fs/f2fs/debug.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c index e671373cc8ab..f5388f37217e 100644 --- a/fs/f2fs/debug.c +++ b/fs/f2fs/debug.c | |||
@@ -35,6 +35,8 @@ static void update_general_status(struct f2fs_sb_info *sbi) | |||
35 | /* validation check of the segment numbers */ | 35 | /* validation check of the segment numbers */ |
36 | si->hit_ext = sbi->read_hit_ext; | 36 | si->hit_ext = sbi->read_hit_ext; |
37 | si->total_ext = sbi->total_hit_ext; | 37 | si->total_ext = sbi->total_hit_ext; |
38 | si->ext_tree = sbi->total_ext_tree; | ||
39 | si->ext_node = atomic_read(&sbi->total_ext_node); | ||
38 | si->ndirty_node = get_pages(sbi, F2FS_DIRTY_NODES); | 40 | si->ndirty_node = get_pages(sbi, F2FS_DIRTY_NODES); |
39 | si->ndirty_dent = get_pages(sbi, F2FS_DIRTY_DENTS); | 41 | si->ndirty_dent = get_pages(sbi, F2FS_DIRTY_DENTS); |
40 | si->ndirty_dirs = sbi->n_dirty_dirs; | 42 | si->ndirty_dirs = sbi->n_dirty_dirs; |
@@ -185,6 +187,9 @@ get_cache: | |||
185 | si->cache_mem += sbi->n_dirty_dirs * sizeof(struct inode_entry); | 187 | si->cache_mem += sbi->n_dirty_dirs * sizeof(struct inode_entry); |
186 | for (i = 0; i <= UPDATE_INO; i++) | 188 | for (i = 0; i <= UPDATE_INO; i++) |
187 | si->cache_mem += sbi->im[i].ino_num * sizeof(struct ino_entry); | 189 | si->cache_mem += sbi->im[i].ino_num * sizeof(struct ino_entry); |
190 | si->cache_mem += sbi->total_ext_tree * sizeof(struct extent_tree); | ||
191 | si->cache_mem += atomic_read(&sbi->total_ext_node) * | ||
192 | sizeof(struct extent_node); | ||
188 | 193 | ||
189 | si->page_mem = 0; | 194 | si->page_mem = 0; |
190 | npages = NODE_MAPPING(sbi)->nrpages; | 195 | npages = NODE_MAPPING(sbi)->nrpages; |
@@ -260,13 +265,20 @@ static int stat_show(struct seq_file *s, void *v) | |||
260 | seq_printf(s, "CP calls: %d\n", si->cp_count); | 265 | seq_printf(s, "CP calls: %d\n", si->cp_count); |
261 | seq_printf(s, "GC calls: %d (BG: %d)\n", | 266 | seq_printf(s, "GC calls: %d (BG: %d)\n", |
262 | si->call_count, si->bg_gc); | 267 | si->call_count, si->bg_gc); |
263 | seq_printf(s, " - data segments : %d\n", si->data_segs); | 268 | seq_printf(s, " - data segments : %d (%d)\n", |
264 | seq_printf(s, " - node segments : %d\n", si->node_segs); | 269 | si->data_segs, si->bg_data_segs); |
265 | seq_printf(s, "Try to move %d blocks\n", si->tot_blks); | 270 | seq_printf(s, " - node segments : %d (%d)\n", |
266 | seq_printf(s, " - data blocks : %d\n", si->data_blks); | 271 | si->node_segs, si->bg_node_segs); |
267 | seq_printf(s, " - node blocks : %d\n", si->node_blks); | 272 | seq_printf(s, "Try to move %d blocks (BG: %d)\n", si->tot_blks, |
273 | si->bg_data_blks + si->bg_node_blks); | ||
274 | seq_printf(s, " - data blocks : %d (%d)\n", si->data_blks, | ||
275 | si->bg_data_blks); | ||
276 | seq_printf(s, " - node blocks : %d (%d)\n", si->node_blks, | ||
277 | si->bg_node_blks); | ||
268 | seq_printf(s, "\nExtent Hit Ratio: %d / %d\n", | 278 | seq_printf(s, "\nExtent Hit Ratio: %d / %d\n", |
269 | si->hit_ext, si->total_ext); | 279 | si->hit_ext, si->total_ext); |
280 | seq_printf(s, "\nExtent Tree Count: %d\n", si->ext_tree); | ||
281 | seq_printf(s, "\nExtent Node Count: %d\n", si->ext_node); | ||
270 | seq_puts(s, "\nBalancing F2FS Async:\n"); | 282 | seq_puts(s, "\nBalancing F2FS Async:\n"); |
271 | seq_printf(s, " - inmem: %4d, wb: %4d\n", | 283 | seq_printf(s, " - inmem: %4d, wb: %4d\n", |
272 | si->inmem_pages, si->wb_pages); | 284 | si->inmem_pages, si->wb_pages); |