aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2017-11-13 20:46:38 -0500
committerJaegeuk Kim <jaegeuk@kernel.org>2017-11-13 21:29:01 -0500
commit2c8a4a28233482ad697db92d86da10fcb498eaf7 (patch)
treef557fbb26bf40662bda7c21b8b3fa6b66d105cc6
parent12f9ef379a5039b8271b4636362b965267a78dda (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.c11
-rw-r--r--fs/f2fs/f2fs.h10
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 {
865enum count_type { 865enum 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
1647static inline void dec_page_count(struct f2fs_sb_info *sbi, int count_type) 1650static 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
1663static inline s64 get_pages(struct f2fs_sb_info *sbi, int count_type) 1668static 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;