diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2017-11-13 20:46:38 -0500 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2017-11-13 21:29:01 -0500 |
commit | 2c8a4a28233482ad697db92d86da10fcb498eaf7 (patch) | |
tree | f557fbb26bf40662bda7c21b8b3fa6b66d105cc6 | |
parent | 12f9ef379a5039b8271b4636362b965267a78dda (diff) |
f2fs: expose quota information in debugfs
This patch shows # of dirty pages and # of hidden quota files.
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r-- | fs/f2fs/debug.c | 11 | ||||
-rw-r--r-- | fs/f2fs/f2fs.h | 10 |
2 files changed, 19 insertions, 2 deletions
diff --git a/fs/f2fs/debug.c b/fs/f2fs/debug.c index f7eec506ceea..ecada8425268 100644 --- a/fs/f2fs/debug.c +++ b/fs/f2fs/debug.c | |||
@@ -45,9 +45,18 @@ static void update_general_status(struct f2fs_sb_info *sbi) | |||
45 | si->ndirty_dent = get_pages(sbi, F2FS_DIRTY_DENTS); | 45 | si->ndirty_dent = get_pages(sbi, F2FS_DIRTY_DENTS); |
46 | si->ndirty_meta = get_pages(sbi, F2FS_DIRTY_META); | 46 | si->ndirty_meta = get_pages(sbi, F2FS_DIRTY_META); |
47 | si->ndirty_data = get_pages(sbi, F2FS_DIRTY_DATA); | 47 | si->ndirty_data = get_pages(sbi, F2FS_DIRTY_DATA); |
48 | si->ndirty_qdata = get_pages(sbi, F2FS_DIRTY_QDATA); | ||
48 | si->ndirty_imeta = get_pages(sbi, F2FS_DIRTY_IMETA); | 49 | si->ndirty_imeta = get_pages(sbi, F2FS_DIRTY_IMETA); |
49 | si->ndirty_dirs = sbi->ndirty_inode[DIR_INODE]; | 50 | si->ndirty_dirs = sbi->ndirty_inode[DIR_INODE]; |
50 | si->ndirty_files = sbi->ndirty_inode[FILE_INODE]; | 51 | si->ndirty_files = sbi->ndirty_inode[FILE_INODE]; |
52 | |||
53 | si->nquota_files = 0; | ||
54 | if (f2fs_sb_has_quota_ino(sbi->sb)) { | ||
55 | for (i = 0; i < MAXQUOTAS; i++) { | ||
56 | if (f2fs_qf_ino(sbi->sb, i)) | ||
57 | si->nquota_files++; | ||
58 | } | ||
59 | } | ||
51 | si->ndirty_all = sbi->ndirty_inode[DIRTY_META]; | 60 | si->ndirty_all = sbi->ndirty_inode[DIRTY_META]; |
52 | si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES); | 61 | si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES); |
53 | si->aw_cnt = atomic_read(&sbi->aw_cnt); | 62 | si->aw_cnt = atomic_read(&sbi->aw_cnt); |
@@ -369,6 +378,8 @@ static int stat_show(struct seq_file *s, void *v) | |||
369 | si->ndirty_dent, si->ndirty_dirs, si->ndirty_all); | 378 | si->ndirty_dent, si->ndirty_dirs, si->ndirty_all); |
370 | seq_printf(s, " - datas: %4d in files:%4d\n", | 379 | seq_printf(s, " - datas: %4d in files:%4d\n", |
371 | si->ndirty_data, si->ndirty_files); | 380 | si->ndirty_data, si->ndirty_files); |
381 | seq_printf(s, " - quota datas: %4d in quota files:%4d\n", | ||
382 | si->ndirty_qdata, si->nquota_files); | ||
372 | seq_printf(s, " - meta: %4d in %4d\n", | 383 | seq_printf(s, " - meta: %4d in %4d\n", |
373 | si->ndirty_meta, si->meta_pages); | 384 | si->ndirty_meta, si->meta_pages); |
374 | seq_printf(s, " - imeta: %4d\n", | 385 | seq_printf(s, " - imeta: %4d\n", |
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 5c379a8ea075..44f874483ecf 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h | |||
@@ -865,6 +865,7 @@ struct f2fs_sm_info { | |||
865 | enum count_type { | 865 | enum count_type { |
866 | F2FS_DIRTY_DENTS, | 866 | F2FS_DIRTY_DENTS, |
867 | F2FS_DIRTY_DATA, | 867 | F2FS_DIRTY_DATA, |
868 | F2FS_DIRTY_QDATA, | ||
868 | F2FS_DIRTY_NODES, | 869 | F2FS_DIRTY_NODES, |
869 | F2FS_DIRTY_META, | 870 | F2FS_DIRTY_META, |
870 | F2FS_INMEM_PAGES, | 871 | F2FS_INMEM_PAGES, |
@@ -1642,6 +1643,8 @@ static inline void inode_inc_dirty_pages(struct inode *inode) | |||
1642 | atomic_inc(&F2FS_I(inode)->dirty_pages); | 1643 | atomic_inc(&F2FS_I(inode)->dirty_pages); |
1643 | inc_page_count(F2FS_I_SB(inode), S_ISDIR(inode->i_mode) ? | 1644 | inc_page_count(F2FS_I_SB(inode), S_ISDIR(inode->i_mode) ? |
1644 | F2FS_DIRTY_DENTS : F2FS_DIRTY_DATA); | 1645 | F2FS_DIRTY_DENTS : F2FS_DIRTY_DATA); |
1646 | if (IS_NOQUOTA(inode)) | ||
1647 | inc_page_count(F2FS_I_SB(inode), F2FS_DIRTY_QDATA); | ||
1645 | } | 1648 | } |
1646 | 1649 | ||
1647 | static inline void dec_page_count(struct f2fs_sb_info *sbi, int count_type) | 1650 | static inline void dec_page_count(struct f2fs_sb_info *sbi, int count_type) |
@@ -1658,6 +1661,8 @@ static inline void inode_dec_dirty_pages(struct inode *inode) | |||
1658 | atomic_dec(&F2FS_I(inode)->dirty_pages); | 1661 | atomic_dec(&F2FS_I(inode)->dirty_pages); |
1659 | dec_page_count(F2FS_I_SB(inode), S_ISDIR(inode->i_mode) ? | 1662 | dec_page_count(F2FS_I_SB(inode), S_ISDIR(inode->i_mode) ? |
1660 | F2FS_DIRTY_DENTS : F2FS_DIRTY_DATA); | 1663 | F2FS_DIRTY_DENTS : F2FS_DIRTY_DATA); |
1664 | if (IS_NOQUOTA(inode)) | ||
1665 | dec_page_count(F2FS_I_SB(inode), F2FS_DIRTY_QDATA); | ||
1661 | } | 1666 | } |
1662 | 1667 | ||
1663 | static inline s64 get_pages(struct f2fs_sb_info *sbi, int count_type) | 1668 | static inline s64 get_pages(struct f2fs_sb_info *sbi, int count_type) |
@@ -2771,9 +2776,10 @@ struct f2fs_stat_info { | |||
2771 | unsigned long long hit_largest, hit_cached, hit_rbtree; | 2776 | unsigned long long hit_largest, hit_cached, hit_rbtree; |
2772 | unsigned long long hit_total, total_ext; | 2777 | unsigned long long hit_total, total_ext; |
2773 | int ext_tree, zombie_tree, ext_node; | 2778 | int ext_tree, zombie_tree, ext_node; |
2774 | int ndirty_node, ndirty_dent, ndirty_meta, ndirty_data, ndirty_imeta; | 2779 | int ndirty_node, ndirty_dent, ndirty_meta, ndirty_imeta; |
2780 | int ndirty_data, ndirty_qdata; | ||
2775 | int inmem_pages; | 2781 | int inmem_pages; |
2776 | unsigned int ndirty_dirs, ndirty_files, ndirty_all; | 2782 | unsigned int ndirty_dirs, ndirty_files, nquota_files, ndirty_all; |
2777 | int nats, dirty_nats, sits, dirty_sits; | 2783 | int nats, dirty_nats, sits, dirty_sits; |
2778 | int free_nids, avail_nids, alloc_nids; | 2784 | int free_nids, avail_nids, alloc_nids; |
2779 | int total_count, utilization; | 2785 | int total_count, utilization; |