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; |
