f2fs: expose quota information in debugfs
Jaegeuk Kim
maintainerPATCH 1/1 f2fs: expose quota information in debugfs
This patch shows # of dirty pages and # of hidden quota files.
--- fs/f2fs/debug.c | 11 +++++++++++ fs/f2fs/f2fs.h | 10 ++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-)
fs/f2fs/debug.c +11 -0
@@ -45,9 +45,18 @@ static void update_general_status(struct f2fs_sb_info *sbi) si->ndirty_dent =get_pages (sbi,F2FS_DIRTY_DENTS ); si->ndirty_meta =get_pages (sbi,F2FS_DIRTY_META ); si->ndirty_data =get_pages (sbi,F2FS_DIRTY_DATA ); + si->ndirty_qdata =get_pages (sbi,F2FS_DIRTY_QDATA ); si->ndirty_imeta =get_pages (sbi,F2FS_DIRTY_IMETA ); si->ndirty_dirs = sbi->ndirty_inode[DIR_INODE ]; si->ndirty_files = sbi->ndirty_inode[FILE_INODE ]; + + si->nquota_files =0 ; +if (f2fs_sb_has_quota_ino (sbi->sb)) { +for (i =0 ; i <MAXQUOTAS ; i++) { +if (f2fs_qf_ino (sbi->sb, i)) + si->nquota_files++; + } + } si->ndirty_all = sbi->ndirty_inode[DIRTY_META ]; si->inmem_pages =get_pages (sbi,F2FS_INMEM_PAGES ); si->aw_cnt =atomic_read (&sbi->aw_cnt);
@@ -369,6 +378,8 @@ static int stat_show(struct seq_file *s, void *v) si->ndirty_dent, si->ndirty_dirs, si->ndirty_all);seq_printf (s," - datas: %4d in files:%4d\n" , si->ndirty_data, si->ndirty_files); +seq_printf (s," - quota datas: %4d in quota files:%4d\n" , + si->ndirty_qdata, si->nquota_files);seq_printf (s," - meta: %4d in %4d\n" , si->ndirty_meta, si->meta_pages); seq_printf(s, " - imeta: %4d\n",
fs/f2fs/f2fs.h +8 -2
@@ -865,6 +865,7 @@ struct f2fs_sm_info {enum count_type {F2FS_DIRTY_DENTS ,F2FS_DIRTY_DATA , +F2FS_DIRTY_QDATA ,F2FS_DIRTY_NODES ,F2FS_DIRTY_META ,F2FS_INMEM_PAGES ,
@@ -1642,6 +1643,8 @@ static inline void inode_inc_dirty_pages(struct inode *inode)atomic_inc (&F2FS_I (inode)->dirty_pages);inc_page_count (F2FS_I_SB (inode),S_ISDIR (inode->i_mode) ?F2FS_DIRTY_DENTS :F2FS_DIRTY_DATA ); +if (IS_NOQUOTA (inode)) +inc_page_count (F2FS_I_SB (inode),F2FS_DIRTY_QDATA ); }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)atomic_dec (&F2FS_I (inode)->dirty_pages);dec_page_count (F2FS_I_SB (inode),S_ISDIR (inode->i_mode) ?F2FS_DIRTY_DENTS :F2FS_DIRTY_DATA ); +if (IS_NOQUOTA (inode)) +dec_page_count (F2FS_I_SB (inode),F2FS_DIRTY_QDATA ); }static inline s64 get_pages (struct f2fs_sb_info *sbi,int count_type)
@@ -2771,9 +2776,10 @@ struct f2fs_stat_info {unsigned long long hit_largest, hit_cached, hit_rbtree;unsigned long long hit_total, total_ext;int ext_tree, zombie_tree, ext_node; -int ndirty_node, ndirty_dent, ndirty_meta, ndirty_data, ndirty_imeta; +int ndirty_node, ndirty_dent, ndirty_meta, ndirty_imeta; +int ndirty_data, ndirty_qdata;int inmem_pages; -unsigned int ndirty_dirs, ndirty_files, ndirty_all; +unsigned int ndirty_dirs, ndirty_files, nquota_files, ndirty_all;int nats, dirty_nats, sits, dirty_sits;int free_nids, avail_nids, alloc_nids;int total_count, utilization;
Signature · 1 line
2.14.0.rc1.383.gd1ce394fe2-goog
Hi Jaegeuk,
Quoted 53 lines · Jaegeuk Kim
This patch shows # of dirty pages and # of hidden quota files.
Signed-off-by Jaegeuk Kim <[email protected]>--- fs/f2fs/debug.c | 11 +++++++++++ fs/f2fs/f2fs.h | 10 ++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-)fs/f2fs/debug.c +11
-0@@ -45,9 +45,18 @@ static void update_general_status(struct f2fs_sb_info *sbi) si->ndirty_dent =get_pages (sbi,F2FS_DIRTY_DENTS ); si->ndirty_meta =get_pages (sbi,F2FS_DIRTY_META ); si->ndirty_data =get_pages (sbi,F2FS_DIRTY_DATA ); + si->ndirty_qdata =get_pages (sbi,F2FS_DIRTY_QDATA ); si->ndirty_imeta =get_pages (sbi,F2FS_DIRTY_IMETA ); si->ndirty_dirs = sbi->ndirty_inode[DIR_INODE ]; si->ndirty_files = sbi->ndirty_inode[FILE_INODE ]; + + si->nquota_files =0 ; +if (f2fs_sb_has_quota_ino (sbi->sb)) { +for (i =0 ; i <MAXQUOTAS ; i++) { +if (f2fs_qf_ino (sbi->sb, i)) + si->nquota_files++; + } + } si->ndirty_all = sbi->ndirty_inode[DIRTY_META ]; si->inmem_pages =get_pages (sbi,F2FS_INMEM_PAGES ); si->aw_cnt =atomic_read (&sbi->aw_cnt);@@ -369,6 +378,8 @@ static int stat_show(struct seq_file *s, void *v) si->ndirty_dent, si->ndirty_dirs, si->ndirty_all);seq_printf (s," - datas: %4d in files:%4d\n" , si->ndirty_data, si->ndirty_files); +seq_printf (s," - quota datas: %4d in quota files:%4d\n" , + si->ndirty_qdata, si->nquota_files);seq_printf (s," - meta: %4d in %4d\n" , si->ndirty_meta, si->meta_pages); seq_printf(s, " - imeta: %4d\n",fs/f2fs/f2fs.h +1
-0@@ -865,6 +865,7 @@ struct f2fs_sm_info {enum count_type {F2FS_DIRTY_DENTS ,F2FS_DIRTY_DATA , +F2FS_DIRTY_QDATA ,F2FS_DIRTY_NODES ,F2FS_DIRTY_META ,F2FS_INMEM_PAGES ,
fs/f2fs/f2fs.h static inline void inode_inc_dirty_pages(struct inode *inode) · line 1646
Quoted 4 lines
fs/f2fs/f2fs.h +1
-0@@ -1642,6 +1643,8 @@ static inline void inode_inc_dirty_pages(struct inode *inode)atomic_inc (&F2FS_I (inode)->dirty_pages);inc_page_count (F2FS_I_SB (inode),S_ISDIR (inode->i_mode) ?F2FS_DIRTY_DENTS :F2FS_DIRTY_DATA ); +if (IS_NOQUOTA (inode))
If we're trying to get quota sysfile information, how about using sysfile ino for distinguishing from normal file?
Thanks,
Quoted 17 lines
fs/f2fs/f2fs.h +3
-0+inc_page_count (F2FS_I_SB (inode),F2FS_DIRTY_QDATA ); }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)atomic_dec (&F2FS_I (inode)->dirty_pages);dec_page_count (F2FS_I_SB (inode),S_ISDIR (inode->i_mode) ?F2FS_DIRTY_DENTS :F2FS_DIRTY_DATA ); +if (IS_NOQUOTA (inode)) +dec_page_count (F2FS_I_SB (inode),F2FS_DIRTY_QDATA ); }static inline s64 get_pages (struct f2fs_sb_info *sbi,int count_type)@@ -2771,9 +2776,10 @@ struct f2fs_stat_info {unsigned long long hit_largest, hit_cached, hit_rbtree;unsigned long long hit_total, total_ext;
fs/f2fs/f2fs.h struct f2fs_stat_info { · line 2785
Quoted 10 lines
fs/f2fs/f2fs.h +3
-2int ext_tree, zombie_tree, ext_node; -int ndirty_node, ndirty_dent, ndirty_meta, ndirty_data, ndirty_imeta; +int ndirty_node, ndirty_dent, ndirty_meta, ndirty_imeta; +int ndirty_data, ndirty_qdata;int inmem_pages; -unsigned int ndirty_dirs, ndirty_files, ndirty_all; +unsigned int ndirty_dirs, ndirty_files, nquota_files, ndirty_all;int nats, dirty_nats, sits, dirty_sits;int free_nids, avail_nids, alloc_nids;int total_count, utilization;
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Jaegeuk Kim
maintainerQuoted 55 lines · Chao Yu
Hi Jaegeuk,
Quoted 52 lines · Jaegeuk Kim
This patch shows # of dirty pages and # of hidden quota files.
Signed-off-by Jaegeuk Kim <[email protected]>--- fs/f2fs/debug.c | 11 +++++++++++ fs/f2fs/f2fs.h | 10 ++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-)fs/f2fs/debug.c +11
-0@@ -45,9 +45,18 @@ static void update_general_status(struct f2fs_sb_info *sbi) si->ndirty_dent =get_pages (sbi,F2FS_DIRTY_DENTS ); si->ndirty_meta =get_pages (sbi,F2FS_DIRTY_META ); si->ndirty_data =get_pages (sbi,F2FS_DIRTY_DATA ); + si->ndirty_qdata =get_pages (sbi,F2FS_DIRTY_QDATA ); si->ndirty_imeta =get_pages (sbi,F2FS_DIRTY_IMETA ); si->ndirty_dirs = sbi->ndirty_inode[DIR_INODE ]; si->ndirty_files = sbi->ndirty_inode[FILE_INODE ]; + + si->nquota_files =0 ; +if (f2fs_sb_has_quota_ino (sbi->sb)) { +for (i =0 ; i <MAXQUOTAS ; i++) { +if (f2fs_qf_ino (sbi->sb, i)) + si->nquota_files++; + } + } si->ndirty_all = sbi->ndirty_inode[DIRTY_META ]; si->inmem_pages =get_pages (sbi,F2FS_INMEM_PAGES ); si->aw_cnt =atomic_read (&sbi->aw_cnt);@@ -369,6 +378,8 @@ static int stat_show(struct seq_file *s, void *v) si->ndirty_dent, si->ndirty_dirs, si->ndirty_all);seq_printf (s," - datas: %4d in files:%4d\n" , si->ndirty_data, si->ndirty_files); +seq_printf (s," - quota datas: %4d in quota files:%4d\n" , + si->ndirty_qdata, si->nquota_files);seq_printf (s," - meta: %4d in %4d\n" , si->ndirty_meta, si->meta_pages); seq_printf(s, " - imeta: %4d\n",fs/f2fs/f2fs.h +1
-0@@ -865,6 +865,7 @@ struct f2fs_sm_info {enum count_type {F2FS_DIRTY_DENTS ,F2FS_DIRTY_DATA , +F2FS_DIRTY_QDATA ,F2FS_DIRTY_NODES ,F2FS_DIRTY_META ,F2FS_INMEM_PAGES ,
Quoted 8 lines
fs/f2fs/f2fs.h static inline void inode_inc_dirty_pages(struct inode *inode) · line 1646
Quoted 5 lines
fs/f2fs/f2fs.h +1
-0@@ -1642,6 +1643,8 @@ static inline void inode_inc_dirty_pages(struct inode *inode)atomic_inc (&F2FS_I (inode)->dirty_pages);inc_page_count (F2FS_I_SB (inode),S_ISDIR (inode->i_mode) ?F2FS_DIRTY_DENTS :F2FS_DIRTY_DATA ); +if (IS_NOQUOTA (inode))If we're trying to get quota sysfile information, how about using sysfile ino for distinguishing from normal file?
I'm afraid of needless loop first. And, the goal is to expose hidden sysfile though, we actually don't need to count it only.
Thanks,
Quoted 30 lines
Thanks,
Quoted 27 lines
fs/f2fs/f2fs.h +6
-2+inc_page_count (F2FS_I_SB (inode),F2FS_DIRTY_QDATA ); }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)atomic_dec (&F2FS_I (inode)->dirty_pages);dec_page_count (F2FS_I_SB (inode),S_ISDIR (inode->i_mode) ?F2FS_DIRTY_DENTS :F2FS_DIRTY_DATA ); +if (IS_NOQUOTA (inode)) +dec_page_count (F2FS_I_SB (inode),F2FS_DIRTY_QDATA ); }static inline s64 get_pages (struct f2fs_sb_info *sbi,int count_type)@@ -2771,9 +2776,10 @@ struct f2fs_stat_info {unsigned long long hit_largest, hit_cached, hit_rbtree;unsigned long long hit_total, total_ext;int ext_tree, zombie_tree, ext_node; -int ndirty_node, ndirty_dent, ndirty_meta, ndirty_data, ndirty_imeta; +int ndirty_node, ndirty_dent, ndirty_meta, ndirty_imeta; +int ndirty_data, ndirty_qdata;int inmem_pages; -unsigned int ndirty_dirs, ndirty_files, ndirty_all; +unsigned int ndirty_dirs, ndirty_files, nquota_files, ndirty_all;int nats, dirty_nats, sits, dirty_sits;int free_nids, avail_nids, alloc_nids;int total_count, utilization;
Quoted 65 lines · Jaegeuk Kim
Quoted 55 lines · Chao Yu
Hi Jaegeuk,
Quoted 52 lines · Jaegeuk Kim
This patch shows # of dirty pages and # of hidden quota files.
Signed-off-by Jaegeuk Kim <[email protected]>--- fs/f2fs/debug.c | 11 +++++++++++ fs/f2fs/f2fs.h | 10 ++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-)fs/f2fs/debug.c +11
-0@@ -45,9 +45,18 @@ static void update_general_status(struct f2fs_sb_info *sbi) si->ndirty_dent =get_pages (sbi,F2FS_DIRTY_DENTS ); si->ndirty_meta =get_pages (sbi,F2FS_DIRTY_META ); si->ndirty_data =get_pages (sbi,F2FS_DIRTY_DATA ); + si->ndirty_qdata =get_pages (sbi,F2FS_DIRTY_QDATA ); si->ndirty_imeta =get_pages (sbi,F2FS_DIRTY_IMETA ); si->ndirty_dirs = sbi->ndirty_inode[DIR_INODE ]; si->ndirty_files = sbi->ndirty_inode[FILE_INODE ]; + + si->nquota_files =0 ; +if (f2fs_sb_has_quota_ino (sbi->sb)) { +for (i =0 ; i <MAXQUOTAS ; i++) { +if (f2fs_qf_ino (sbi->sb, i)) + si->nquota_files++; + } + } si->ndirty_all = sbi->ndirty_inode[DIRTY_META ]; si->inmem_pages =get_pages (sbi,F2FS_INMEM_PAGES ); si->aw_cnt =atomic_read (&sbi->aw_cnt);@@ -369,6 +378,8 @@ static int stat_show(struct seq_file *s, void *v) si->ndirty_dent, si->ndirty_dirs, si->ndirty_all);seq_printf (s," - datas: %4d in files:%4d\n" , si->ndirty_data, si->ndirty_files); +seq_printf (s," - quota datas: %4d in quota files:%4d\n" , + si->ndirty_qdata, si->nquota_files);seq_printf (s," - meta: %4d in %4d\n" , si->ndirty_meta, si->meta_pages); seq_printf(s, " - imeta: %4d\n",fs/f2fs/f2fs.h +1
-0@@ -865,6 +865,7 @@ struct f2fs_sm_info {enum count_type {F2FS_DIRTY_DENTS ,F2FS_DIRTY_DATA , +F2FS_DIRTY_QDATA ,F2FS_DIRTY_NODES ,F2FS_DIRTY_META ,F2FS_INMEM_PAGES ,Quoted 8 lines
fs/f2fs/f2fs.h static inline void inode_inc_dirty_pages(struct inode *inode) · line 1646
Quoted 5 lines
fs/f2fs/f2fs.h +1
-0@@ -1642,6 +1643,8 @@ static inline void inode_inc_dirty_pages(struct inode *inode)atomic_inc (&F2FS_I (inode)->dirty_pages);inc_page_count (F2FS_I_SB (inode),S_ISDIR (inode->i_mode) ?F2FS_DIRTY_DENTS :F2FS_DIRTY_DATA ); +if (IS_NOQUOTA (inode))If we're trying to get quota sysfile information, how about using sysfile ino for distinguishing from normal file?
Quoted 2 lines
I'm afraid of needless loop first. And, the goal is to expose hidden sysfile though, we actually don't need to count it only.
I just saw in somewhere, we will tag S_NOQUOTA in non-quota inode, e.g. failed created inode, but I didn't see there will be any dirty page creation/removal in such inode so far, so we're safe to track dirty page count for inodes tagged with S_NOQUOTA flag.
Thanks,
Quoted 27 lines
Thanks,
Quoted 24 lines
Thanks,
Quoted 21 lines
fs/f2fs/f2fs.h +5
-1+inc_page_count (F2FS_I_SB (inode),F2FS_DIRTY_QDATA ); }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)atomic_dec (&F2FS_I (inode)->dirty_pages);dec_page_count (F2FS_I_SB (inode),S_ISDIR (inode->i_mode) ?F2FS_DIRTY_DENTS :F2FS_DIRTY_DATA ); +if (IS_NOQUOTA (inode)) +dec_page_count (F2FS_I_SB (inode),F2FS_DIRTY_QDATA ); }static inline s64 get_pages (struct f2fs_sb_info *sbi,int count_type)@@ -2771,9 +2776,10 @@ struct f2fs_stat_info {unsigned long long hit_largest, hit_cached, hit_rbtree;unsigned long long hit_total, total_ext;int ext_tree, zombie_tree, ext_node; -int ndirty_node, ndirty_dent, ndirty_meta, ndirty_data, ndirty_imeta; +int ndirty_node, ndirty_dent, ndirty_meta, ndirty_imeta; +int ndirty_data, ndirty_qdata;int inmem_pages;
Quoted 9 lines
Quoted 6 lines
fs/f2fs/f2fs.h struct f2fs_stat_info { · line 2785
Quoted 6 lines
fs/f2fs/f2fs.h +1
-1-unsigned int ndirty_dirs, ndirty_files, ndirty_all; +unsigned int ndirty_dirs, ndirty_files, nquota_files, ndirty_all;int nats, dirty_nats, sits, dirty_sits;int free_nids, avail_nids, alloc_nids;int total_count, utilization;.
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot