* [PATCH] f2fs: expose quota information in debugfs @ 2017-11-14 5:12 Jaegeuk Kim 2017-11-15 7:47 ` [f2fs-dev] " Chao Yu 0 siblings, 1 reply; 4+ messages in thread From: Jaegeuk Kim @ 2017-11-14 5:12 UTC (permalink / raw) To: linux-kernel, linux-f2fs-devel; +Cc: Jaegeuk Kim This patch shows # of dirty pages and # of hidden quota files. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> --- fs/f2fs/debug.c | 11 +++++++++++ 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) 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", 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 { 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; -- 2.14.0.rc1.383.gd1ce394fe2-goog ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [f2fs-dev] [PATCH] f2fs: expose quota information in debugfs 2017-11-14 5:12 [PATCH] f2fs: expose quota information in debugfs Jaegeuk Kim @ 2017-11-15 7:47 ` Chao Yu 2017-11-15 16:24 ` Jaegeuk Kim 0 siblings, 1 reply; 4+ messages in thread From: Chao Yu @ 2017-11-15 7:47 UTC (permalink / raw) To: Jaegeuk Kim, linux-kernel, linux-f2fs-devel Hi Jaegeuk, On 2017/11/14 13:12, Jaegeuk Kim wrote: > This patch shows # of dirty pages and # of hidden quota files. > > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> > --- > fs/f2fs/debug.c | 11 +++++++++++ > 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) > 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", > 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 { > 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)) If we're trying to get quota sysfile information, how about using sysfile ino for distinguishing from normal file? Thanks, > + 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; > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [f2fs-dev] [PATCH] f2fs: expose quota information in debugfs 2017-11-15 7:47 ` [f2fs-dev] " Chao Yu @ 2017-11-15 16:24 ` Jaegeuk Kim 2017-11-16 2:34 ` Chao Yu 0 siblings, 1 reply; 4+ messages in thread From: Jaegeuk Kim @ 2017-11-15 16:24 UTC (permalink / raw) To: Chao Yu; +Cc: linux-kernel, linux-f2fs-devel On 11/15, Chao Yu wrote: > Hi Jaegeuk, > > On 2017/11/14 13:12, Jaegeuk Kim wrote: > > This patch shows # of dirty pages and # of hidden quota files. > > > > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> > > --- > > fs/f2fs/debug.c | 11 +++++++++++ > > 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) > > 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", > > 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 { > > 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)) > > 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, > > Thanks, > > > + 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; > > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [f2fs-dev] [PATCH] f2fs: expose quota information in debugfs 2017-11-15 16:24 ` Jaegeuk Kim @ 2017-11-16 2:34 ` Chao Yu 0 siblings, 0 replies; 4+ messages in thread From: Chao Yu @ 2017-11-16 2:34 UTC (permalink / raw) To: Jaegeuk Kim; +Cc: linux-kernel, linux-f2fs-devel On 2017/11/16 0:24, Jaegeuk Kim wrote: > On 11/15, Chao Yu wrote: >> Hi Jaegeuk, >> >> On 2017/11/14 13:12, Jaegeuk Kim wrote: >>> This patch shows # of dirty pages and # of hidden quota files. >>> >>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> >>> --- >>> fs/f2fs/debug.c | 11 +++++++++++ >>> 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) >>> 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", >>> 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 { >>> 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)) >> >> 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. 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, > > Thanks, > >> >> Thanks, >> >>> + 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; >>> > > . > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-11-16 2:35 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-11-14 5:12 [PATCH] f2fs: expose quota information in debugfs Jaegeuk Kim 2017-11-15 7:47 ` [f2fs-dev] " Chao Yu 2017-11-15 16:24 ` Jaegeuk Kim 2017-11-16 2:34 ` Chao Yu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
Powered by JetHome