* [PATCH v4 1/2] ext4: add helpers for checking whether quota can be enabled/is journalled @ 2020-10-22 3:20 Roman Anufriev 2020-10-22 3:21 ` [PATCH v4 2/2] ext4: print quota journalling mode on (re-)mount Roman Anufriev ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Roman Anufriev @ 2020-10-22 3:20 UTC (permalink / raw) To: linux-ext4; +Cc: tytso, jack, dmtrmonakhov, dotdot Right now, there are several places, where we check whether fs is capable of enabling quota or if quota is journalled with quite long and non-self-descriptive condition statements. This patch wraps these statements into helpers for better readability and easier usage. Signed-off-by: Roman Anufriev <dotdot@yandex-team.ru> --- fs/ext4/ext4.h | 15 +++++++++++++++ fs/ext4/ext4_jbd2.h | 9 +++------ fs/ext4/super.c | 5 +---- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 250e905..897df24 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -3251,6 +3251,21 @@ static inline void ext4_unlock_group(struct super_block *sb, spin_unlock(ext4_group_lock_ptr(sb, group)); } +#ifdef CONFIG_QUOTA +static inline bool ext4_quota_capable(struct super_block *sb) +{ + return (test_opt(sb, QUOTA) || ext4_has_feature_quota(sb)); +} + +static inline bool ext4_is_quota_journalled(struct super_block *sb) +{ + struct ext4_sb_info *sbi = EXT4_SB(sb); + + return (ext4_has_feature_quota(sb) || + sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]); +} +#endif + /* * Block validity checking */ diff --git a/fs/ext4/ext4_jbd2.h b/fs/ext4/ext4_jbd2.h index 00dc668..a124c68 100644 --- a/fs/ext4/ext4_jbd2.h +++ b/fs/ext4/ext4_jbd2.h @@ -86,17 +86,14 @@ #ifdef CONFIG_QUOTA /* Amount of blocks needed for quota update - we know that the structure was * allocated so we need to update only data block */ -#define EXT4_QUOTA_TRANS_BLOCKS(sb) ((test_opt(sb, QUOTA) ||\ - ext4_has_feature_quota(sb)) ? 1 : 0) +#define EXT4_QUOTA_TRANS_BLOCKS(sb) ((ext4_quota_capable(sb)) ? 1 : 0) /* Amount of blocks needed for quota insert/delete - we do some block writes * but inode, sb and group updates are done only once */ -#define EXT4_QUOTA_INIT_BLOCKS(sb) ((test_opt(sb, QUOTA) ||\ - ext4_has_feature_quota(sb)) ?\ +#define EXT4_QUOTA_INIT_BLOCKS(sb) ((ext4_quota_capable(sb)) ?\ (DQUOT_INIT_ALLOC*(EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)\ +3+DQUOT_INIT_REWRITE) : 0) -#define EXT4_QUOTA_DEL_BLOCKS(sb) ((test_opt(sb, QUOTA) ||\ - ext4_has_feature_quota(sb)) ?\ +#define EXT4_QUOTA_DEL_BLOCKS(sb) ((ext4_quota_capable(sb)) ?\ (DQUOT_DEL_ALLOC*(EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)\ +3+DQUOT_DEL_REWRITE) : 0) #else diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 9d01318..a988cf3 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -6158,11 +6158,8 @@ static int ext4_release_dquot(struct dquot *dquot) static int ext4_mark_dquot_dirty(struct dquot *dquot) { struct super_block *sb = dquot->dq_sb; - struct ext4_sb_info *sbi = EXT4_SB(sb); - /* Are we journaling quotas? */ - if (ext4_has_feature_quota(sb) || - sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) { + if (ext4_is_quota_journalled(sb)) { dquot_mark_dquot_dirty(dquot); return ext4_write_dquot(dquot); } else { -- 2.7.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v4 2/2] ext4: print quota journalling mode on (re-)mount 2020-10-22 3:20 [PATCH v4 1/2] ext4: add helpers for checking whether quota can be enabled/is journalled Roman Anufriev @ 2020-10-22 3:21 ` Roman Anufriev 2020-10-23 15:48 ` Jan Kara 2020-12-03 14:07 ` Theodore Y. Ts'o 2020-10-23 15:47 ` [PATCH v4 1/2] ext4: add helpers for checking whether quota can be enabled/is journalled Jan Kara 2020-12-03 14:07 ` Theodore Y. Ts'o 2 siblings, 2 replies; 7+ messages in thread From: Roman Anufriev @ 2020-10-22 3:21 UTC (permalink / raw) To: linux-ext4; +Cc: tytso, jack, dmtrmonakhov, dotdot Right now, it is hard to understand which quota journalling type is enabled: you need to be quite familiar with kernel code and trace it or really understand what different combinations of fs flags/mount options lead to. This patch adds printing of current quota jounalling mode on each mount/remount, thus making it easier to check it at a glance/in autotests. The semantics is similar to ext4 data journalling modes: * journalled - quota configured, journalling will be enabled * writeback - quota configured, journalling won't be enabled * none - quota isn't configured * disabled - kernel compiled without CONFIG_QUOTA feature Signed-off-by: Roman Anufriev <dotdot@yandex-team.ru> --- fs/ext4/super.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/fs/ext4/super.c b/fs/ext4/super.c index a988cf3..f2ddba4 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -3985,6 +3985,21 @@ static void ext4_set_resv_clusters(struct super_block *sb) atomic64_set(&sbi->s_resv_clusters, resv_clusters); } +static const char *ext4_quota_mode(struct super_block *sb) +{ +#ifdef CONFIG_QUOTA + if (!ext4_quota_capable(sb)) + return "none"; + + if (EXT4_SB(sb)->s_journal && ext4_is_quota_journalled(sb)) + return "journalled"; + else + return "writeback"; +#else + return "disabled"; +#endif +} + static int ext4_fill_super(struct super_block *sb, void *data, int silent) { struct dax_device *dax_dev = fs_dax_get_by_bdev(sb->s_bdev); @@ -5039,10 +5054,11 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) if (___ratelimit(&ext4_mount_msg_ratelimit, "EXT4-fs mount")) ext4_msg(sb, KERN_INFO, "mounted filesystem with%s. " - "Opts: %.*s%s%s", descr, + "Opts: %.*s%s%s. Quota mode: %s.", descr, (int) sizeof(sbi->s_es->s_mount_opts), sbi->s_es->s_mount_opts, - *sbi->s_es->s_mount_opts ? "; " : "", orig_data); + *sbi->s_es->s_mount_opts ? "; " : "", orig_data, + ext4_quota_mode(sb)); if (es->s_error_count) mod_timer(&sbi->s_err_report, jiffies + 300*HZ); /* 5 minutes */ @@ -5979,7 +5995,8 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data) */ *flags = (*flags & ~vfs_flags) | (sb->s_flags & vfs_flags); - ext4_msg(sb, KERN_INFO, "re-mounted. Opts: %s", orig_data); + ext4_msg(sb, KERN_INFO, "re-mounted. Opts: %s. Quota mode: %s.", + orig_data, ext4_quota_mode(sb)); kfree(orig_data); return 0; -- 2.7.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/2] ext4: print quota journalling mode on (re-)mount 2020-10-22 3:21 ` [PATCH v4 2/2] ext4: print quota journalling mode on (re-)mount Roman Anufriev @ 2020-10-23 15:48 ` Jan Kara 2020-11-13 22:24 ` Roman Anufriev 2020-12-03 14:07 ` Theodore Y. Ts'o 1 sibling, 1 reply; 7+ messages in thread From: Jan Kara @ 2020-10-23 15:48 UTC (permalink / raw) To: Roman Anufriev; +Cc: linux-ext4, tytso, jack, dmtrmonakhov On Thu 22-10-20 06:21:00, Roman Anufriev wrote: > Right now, it is hard to understand which quota journalling type is enabled: > you need to be quite familiar with kernel code and trace it or really > understand what different combinations of fs flags/mount options lead to. > > This patch adds printing of current quota jounalling mode on each > mount/remount, thus making it easier to check it at a glance/in autotests. > The semantics is similar to ext4 data journalling modes: > > * journalled - quota configured, journalling will be enabled > * writeback - quota configured, journalling won't be enabled > * none - quota isn't configured > * disabled - kernel compiled without CONFIG_QUOTA feature > > Signed-off-by: Roman Anufriev <dotdot@yandex-team.ru> Looks good to me. You can add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/ext4/super.c | 23 ++++++++++++++++++++--- > 1 file changed, 20 insertions(+), 3 deletions(-) > > diff --git a/fs/ext4/super.c b/fs/ext4/super.c > index a988cf3..f2ddba4 100644 > --- a/fs/ext4/super.c > +++ b/fs/ext4/super.c > @@ -3985,6 +3985,21 @@ static void ext4_set_resv_clusters(struct super_block *sb) > atomic64_set(&sbi->s_resv_clusters, resv_clusters); > } > > +static const char *ext4_quota_mode(struct super_block *sb) > +{ > +#ifdef CONFIG_QUOTA > + if (!ext4_quota_capable(sb)) > + return "none"; > + > + if (EXT4_SB(sb)->s_journal && ext4_is_quota_journalled(sb)) > + return "journalled"; > + else > + return "writeback"; > +#else > + return "disabled"; > +#endif > +} > + > static int ext4_fill_super(struct super_block *sb, void *data, int silent) > { > struct dax_device *dax_dev = fs_dax_get_by_bdev(sb->s_bdev); > @@ -5039,10 +5054,11 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) > > if (___ratelimit(&ext4_mount_msg_ratelimit, "EXT4-fs mount")) > ext4_msg(sb, KERN_INFO, "mounted filesystem with%s. " > - "Opts: %.*s%s%s", descr, > + "Opts: %.*s%s%s. Quota mode: %s.", descr, > (int) sizeof(sbi->s_es->s_mount_opts), > sbi->s_es->s_mount_opts, > - *sbi->s_es->s_mount_opts ? "; " : "", orig_data); > + *sbi->s_es->s_mount_opts ? "; " : "", orig_data, > + ext4_quota_mode(sb)); > > if (es->s_error_count) > mod_timer(&sbi->s_err_report, jiffies + 300*HZ); /* 5 minutes */ > @@ -5979,7 +5995,8 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data) > */ > *flags = (*flags & ~vfs_flags) | (sb->s_flags & vfs_flags); > > - ext4_msg(sb, KERN_INFO, "re-mounted. Opts: %s", orig_data); > + ext4_msg(sb, KERN_INFO, "re-mounted. Opts: %s. Quota mode: %s.", > + orig_data, ext4_quota_mode(sb)); > kfree(orig_data); > return 0; > > -- > 2.7.4 > -- Jan Kara <jack@suse.com> SUSE Labs, CR ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/2] ext4: print quota journalling mode on (re-)mount 2020-10-23 15:48 ` Jan Kara @ 2020-11-13 22:24 ` Roman Anufriev 0 siblings, 0 replies; 7+ messages in thread From: Roman Anufriev @ 2020-11-13 22:24 UTC (permalink / raw) To: tytso; +Cc: linux-ext4, jack, dmtrmonakhov, dotdot Hi! My patch was reviewed by Jan Kara, could you please take a look at it? Roman ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 2/2] ext4: print quota journalling mode on (re-)mount 2020-10-22 3:21 ` [PATCH v4 2/2] ext4: print quota journalling mode on (re-)mount Roman Anufriev 2020-10-23 15:48 ` Jan Kara @ 2020-12-03 14:07 ` Theodore Y. Ts'o 1 sibling, 0 replies; 7+ messages in thread From: Theodore Y. Ts'o @ 2020-12-03 14:07 UTC (permalink / raw) To: Roman Anufriev; +Cc: linux-ext4, jack, dmtrmonakhov On Thu, Oct 22, 2020 at 06:21:00AM +0300, Roman Anufriev wrote: > Right now, it is hard to understand which quota journalling type is enabled: > you need to be quite familiar with kernel code and trace it or really > understand what different combinations of fs flags/mount options lead to. > > This patch adds printing of current quota jounalling mode on each > mount/remount, thus making it easier to check it at a glance/in autotests. > The semantics is similar to ext4 data journalling modes: > > * journalled - quota configured, journalling will be enabled > * writeback - quota configured, journalling won't be enabled > * none - quota isn't configured > * disabled - kernel compiled without CONFIG_QUOTA feature > > Signed-off-by: Roman Anufriev <dotdot@yandex-team.ru> Applied, thanks. - Ted ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 1/2] ext4: add helpers for checking whether quota can be enabled/is journalled 2020-10-22 3:20 [PATCH v4 1/2] ext4: add helpers for checking whether quota can be enabled/is journalled Roman Anufriev 2020-10-22 3:21 ` [PATCH v4 2/2] ext4: print quota journalling mode on (re-)mount Roman Anufriev @ 2020-10-23 15:47 ` Jan Kara 2020-12-03 14:07 ` Theodore Y. Ts'o 2 siblings, 0 replies; 7+ messages in thread From: Jan Kara @ 2020-10-23 15:47 UTC (permalink / raw) To: Roman Anufriev; +Cc: linux-ext4, tytso, jack, dmtrmonakhov On Thu 22-10-20 06:20:59, Roman Anufriev wrote: > Right now, there are several places, where we check whether fs is > capable of enabling quota or if quota is journalled with quite long > and non-self-descriptive condition statements. > > This patch wraps these statements into helpers for better readability > and easier usage. > > Signed-off-by: Roman Anufriev <dotdot@yandex-team.ru> Looks good to me. You can add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > --- > fs/ext4/ext4.h | 15 +++++++++++++++ > fs/ext4/ext4_jbd2.h | 9 +++------ > fs/ext4/super.c | 5 +---- > 3 files changed, 19 insertions(+), 10 deletions(-) > > diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h > index 250e905..897df24 100644 > --- a/fs/ext4/ext4.h > +++ b/fs/ext4/ext4.h > @@ -3251,6 +3251,21 @@ static inline void ext4_unlock_group(struct super_block *sb, > spin_unlock(ext4_group_lock_ptr(sb, group)); > } > > +#ifdef CONFIG_QUOTA > +static inline bool ext4_quota_capable(struct super_block *sb) > +{ > + return (test_opt(sb, QUOTA) || ext4_has_feature_quota(sb)); > +} > + > +static inline bool ext4_is_quota_journalled(struct super_block *sb) > +{ > + struct ext4_sb_info *sbi = EXT4_SB(sb); > + > + return (ext4_has_feature_quota(sb) || > + sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]); > +} > +#endif > + > /* > * Block validity checking > */ > diff --git a/fs/ext4/ext4_jbd2.h b/fs/ext4/ext4_jbd2.h > index 00dc668..a124c68 100644 > --- a/fs/ext4/ext4_jbd2.h > +++ b/fs/ext4/ext4_jbd2.h > @@ -86,17 +86,14 @@ > #ifdef CONFIG_QUOTA > /* Amount of blocks needed for quota update - we know that the structure was > * allocated so we need to update only data block */ > -#define EXT4_QUOTA_TRANS_BLOCKS(sb) ((test_opt(sb, QUOTA) ||\ > - ext4_has_feature_quota(sb)) ? 1 : 0) > +#define EXT4_QUOTA_TRANS_BLOCKS(sb) ((ext4_quota_capable(sb)) ? 1 : 0) > /* Amount of blocks needed for quota insert/delete - we do some block writes > * but inode, sb and group updates are done only once */ > -#define EXT4_QUOTA_INIT_BLOCKS(sb) ((test_opt(sb, QUOTA) ||\ > - ext4_has_feature_quota(sb)) ?\ > +#define EXT4_QUOTA_INIT_BLOCKS(sb) ((ext4_quota_capable(sb)) ?\ > (DQUOT_INIT_ALLOC*(EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)\ > +3+DQUOT_INIT_REWRITE) : 0) > > -#define EXT4_QUOTA_DEL_BLOCKS(sb) ((test_opt(sb, QUOTA) ||\ > - ext4_has_feature_quota(sb)) ?\ > +#define EXT4_QUOTA_DEL_BLOCKS(sb) ((ext4_quota_capable(sb)) ?\ > (DQUOT_DEL_ALLOC*(EXT4_SINGLEDATA_TRANS_BLOCKS(sb)-3)\ > +3+DQUOT_DEL_REWRITE) : 0) > #else > diff --git a/fs/ext4/super.c b/fs/ext4/super.c > index 9d01318..a988cf3 100644 > --- a/fs/ext4/super.c > +++ b/fs/ext4/super.c > @@ -6158,11 +6158,8 @@ static int ext4_release_dquot(struct dquot *dquot) > static int ext4_mark_dquot_dirty(struct dquot *dquot) > { > struct super_block *sb = dquot->dq_sb; > - struct ext4_sb_info *sbi = EXT4_SB(sb); > > - /* Are we journaling quotas? */ > - if (ext4_has_feature_quota(sb) || > - sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) { > + if (ext4_is_quota_journalled(sb)) { > dquot_mark_dquot_dirty(dquot); > return ext4_write_dquot(dquot); > } else { > -- > 2.7.4 > -- Jan Kara <jack@suse.com> SUSE Labs, CR ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v4 1/2] ext4: add helpers for checking whether quota can be enabled/is journalled 2020-10-22 3:20 [PATCH v4 1/2] ext4: add helpers for checking whether quota can be enabled/is journalled Roman Anufriev 2020-10-22 3:21 ` [PATCH v4 2/2] ext4: print quota journalling mode on (re-)mount Roman Anufriev 2020-10-23 15:47 ` [PATCH v4 1/2] ext4: add helpers for checking whether quota can be enabled/is journalled Jan Kara @ 2020-12-03 14:07 ` Theodore Y. Ts'o 2 siblings, 0 replies; 7+ messages in thread From: Theodore Y. Ts'o @ 2020-12-03 14:07 UTC (permalink / raw) To: Roman Anufriev; +Cc: linux-ext4, jack, dmtrmonakhov On Thu, Oct 22, 2020 at 06:20:59AM +0300, Roman Anufriev wrote: > Right now, there are several places, where we check whether fs is > capable of enabling quota or if quota is journalled with quite long > and non-self-descriptive condition statements. > > This patch wraps these statements into helpers for better readability > and easier usage. > > Signed-off-by: Roman Anufriev <dotdot@yandex-team.ru> Applied, thanks. - Ted ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-12-03 14:08 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-10-22 3:20 [PATCH v4 1/2] ext4: add helpers for checking whether quota can be enabled/is journalled Roman Anufriev 2020-10-22 3:21 ` [PATCH v4 2/2] ext4: print quota journalling mode on (re-)mount Roman Anufriev 2020-10-23 15:48 ` Jan Kara 2020-11-13 22:24 ` Roman Anufriev 2020-12-03 14:07 ` Theodore Y. Ts'o 2020-10-23 15:47 ` [PATCH v4 1/2] ext4: add helpers for checking whether quota can be enabled/is journalled Jan Kara 2020-12-03 14:07 ` Theodore Y. Ts'o
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).