2020-10-15 12:23:25

by Roman Anufriev

[permalink] [raw]
Subject: [PATCH 1/2] ext4: add helpers for checking whether quota is enabled/journalled

Right now, there are several places, where we check whether quota
is enabled or journalled with quite long and non-self-descriptive
condition statements.

This patch wraps these statements into helpers (with naming along
with existing ones like sb_has_quota_loaded) for better readability
and easier usage.

Signed-off-by: Roman Anufriev <[email protected]>
Reviewed-by: Dmitry Monakhov <[email protected]>
---
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..217ae7b 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_any_quota_enabled(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..4a4eb3f 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_any_quota_enabled(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_any_quota_enabled(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_any_quota_enabled(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


2020-10-15 12:24:02

by Roman Anufriev

[permalink] [raw]
Subject: [PATCH 2/2] ext4: export quota journalling mode via sysfs attr quota_mode

Right now, it is hard to understand what 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 exports via sysfs attr /sys/fs/ext4/<disk>/quota_mode current
quota jounalling mode, making it easier to check at a glance/in autotests.
The semantics is similar to ext4 data journalling modes:

* journalled - quota accounting and journaling are enabled
* writeback - quota accounting is enabled, but journalling is disabled
* none - quota accounting is disabled
* disabled - kernel compiled without CONFIG_QUOTA feature

Signed-off-by: Roman Anufriev <[email protected]>
Reviewed-by: Dmitry Monakhov <[email protected]>
---
fs/ext4/sysfs.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
index bfabb79..a46487f 100644
--- a/fs/ext4/sysfs.c
+++ b/fs/ext4/sysfs.c
@@ -36,6 +36,7 @@ typedef enum {
attr_pointer_string,
attr_pointer_atomic,
attr_journal_task,
+ attr_quota_mode,
} attr_id_t;

typedef enum {
@@ -140,6 +141,23 @@ static ssize_t journal_task_show(struct ext4_sb_info *sbi, char *buf)
task_pid_vnr(sbi->s_journal->j_task));
}

+static ssize_t quota_mode_show(struct ext4_sb_info *sbi, char *buf)
+{
+#ifdef CONFIG_QUOTA
+ struct super_block *sb = sbi->s_buddy_cache->i_sb;
+
+ if (!ext4_any_quota_enabled(sb))
+ return snprintf(buf, PAGE_SIZE, "none\n");
+
+ if (ext4_is_quota_journalled(sb))
+ return snprintf(buf, PAGE_SIZE, "journalled\n");
+ else
+ return snprintf(buf, PAGE_SIZE, "writeback\n");
+#else
+ return snprintf(buf, PAGE_SIZE, "disabled\n");
+#endif
+}
+
#define EXT4_ATTR(_name,_mode,_id) \
static struct ext4_attr ext4_attr_##_name = { \
.attr = {.name = __stringify(_name), .mode = _mode }, \
@@ -248,6 +266,7 @@ EXT4_ATTR(last_error_time, 0444, last_error_time);
EXT4_ATTR(journal_task, 0444, journal_task);
EXT4_RW_ATTR_SBI_UI(mb_prefetch, s_mb_prefetch);
EXT4_RW_ATTR_SBI_UI(mb_prefetch_limit, s_mb_prefetch_limit);
+EXT4_ATTR_FUNC(quota_mode, 0444);

static unsigned int old_bump_val = 128;
EXT4_ATTR_PTR(max_writeback_mb_bump, 0444, pointer_ui, &old_bump_val);
@@ -296,6 +315,7 @@ static struct attribute *ext4_attrs[] = {
#endif
ATTR_LIST(mb_prefetch),
ATTR_LIST(mb_prefetch_limit),
+ ATTR_LIST(quota_mode),
NULL,
};
ATTRIBUTE_GROUPS(ext4);
@@ -425,6 +445,8 @@ static ssize_t ext4_attr_show(struct kobject *kobj,
return print_tstamp(buf, sbi->s_es, s_last_error_time);
case attr_journal_task:
return journal_task_show(sbi, buf);
+ case attr_quota_mode:
+ return quota_mode_show(sbi, buf);
}

return 0;
--
2.7.4

2020-10-15 12:38:51

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH 1/2] ext4: add helpers for checking whether quota is enabled/journalled

On Thu 15-10-20 14:32:51, Roman Anufriev wrote:
> Right now, there are several places, where we check whether quota
> is enabled or journalled with quite long and non-self-descriptive
> condition statements.
>
> This patch wraps these statements into helpers (with naming along
> with existing ones like sb_has_quota_loaded) for better readability
> and easier usage.
>
> Signed-off-by: Roman Anufriev <[email protected]>
> Reviewed-by: Dmitry Monakhov <[email protected]>

Looks good to me. You can add:

Reviewed-by: Jan Kara <[email protected]>

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..217ae7b 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_any_quota_enabled(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..4a4eb3f 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_any_quota_enabled(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_any_quota_enabled(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_any_quota_enabled(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 <[email protected]>
SUSE Labs, CR

2020-10-15 13:16:20

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH 2/2] ext4: export quota journalling mode via sysfs attr quota_mode

On Thu 15-10-20 14:32:52, Roman Anufriev wrote:
> Right now, it is hard to understand what 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 exports via sysfs attr /sys/fs/ext4/<disk>/quota_mode current
> quota jounalling mode, making it easier to check at a glance/in autotests.
> The semantics is similar to ext4 data journalling modes:
>
> * journalled - quota accounting and journaling are enabled
> * writeback - quota accounting is enabled, but journalling is disabled
> * none - quota accounting is disabled
> * disabled - kernel compiled without CONFIG_QUOTA feature
>
> Signed-off-by: Roman Anufriev <[email protected]>
> Reviewed-by: Dmitry Monakhov <[email protected]>

Hum, I'm not sure about this. The state of quota can be found out with
"quotaon -p <mntpoint>" (or corresponding quotactl if you need this from
C). The only thing you won't learn is journalled / writeback mode and
generally you should not care about this although I agree that for fs
crash testing purposes you may care. But is that big enough usecase for a
new sysfs file when all the information is already available for userspace
just not in a convenient form?

BTW, I've now realized ext4_any_quota_enabled() has actually misleading
name in the sysfs file reports wrong information. It is rather
ext4_any_quota_may_be_enabled() since presence of QUOTA mount option only
says that quotaon(8) will enable quotas if it is run, not that quota
accounting is enabled. sb_any_quota_loaded() tells you if accounting is
actually enabled or not (however this can change anytime so that's why we
use more relaxed checks for the purpose of journal credit estimates).

Honza

> ---
> fs/ext4/sysfs.c | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
> index bfabb79..a46487f 100644
> --- a/fs/ext4/sysfs.c
> +++ b/fs/ext4/sysfs.c
> @@ -36,6 +36,7 @@ typedef enum {
> attr_pointer_string,
> attr_pointer_atomic,
> attr_journal_task,
> + attr_quota_mode,
> } attr_id_t;
>
> typedef enum {
> @@ -140,6 +141,23 @@ static ssize_t journal_task_show(struct ext4_sb_info *sbi, char *buf)
> task_pid_vnr(sbi->s_journal->j_task));
> }
>
> +static ssize_t quota_mode_show(struct ext4_sb_info *sbi, char *buf)
> +{
> +#ifdef CONFIG_QUOTA
> + struct super_block *sb = sbi->s_buddy_cache->i_sb;
> +
> + if (!ext4_any_quota_enabled(sb))
> + return snprintf(buf, PAGE_SIZE, "none\n");
> +
> + if (ext4_is_quota_journalled(sb))
> + return snprintf(buf, PAGE_SIZE, "journalled\n");
> + else
> + return snprintf(buf, PAGE_SIZE, "writeback\n");
> +#else
> + return snprintf(buf, PAGE_SIZE, "disabled\n");
> +#endif
> +}
> +
> #define EXT4_ATTR(_name,_mode,_id) \
> static struct ext4_attr ext4_attr_##_name = { \
> .attr = {.name = __stringify(_name), .mode = _mode }, \
> @@ -248,6 +266,7 @@ EXT4_ATTR(last_error_time, 0444, last_error_time);
> EXT4_ATTR(journal_task, 0444, journal_task);
> EXT4_RW_ATTR_SBI_UI(mb_prefetch, s_mb_prefetch);
> EXT4_RW_ATTR_SBI_UI(mb_prefetch_limit, s_mb_prefetch_limit);
> +EXT4_ATTR_FUNC(quota_mode, 0444);
>
> static unsigned int old_bump_val = 128;
> EXT4_ATTR_PTR(max_writeback_mb_bump, 0444, pointer_ui, &old_bump_val);
> @@ -296,6 +315,7 @@ static struct attribute *ext4_attrs[] = {
> #endif
> ATTR_LIST(mb_prefetch),
> ATTR_LIST(mb_prefetch_limit),
> + ATTR_LIST(quota_mode),
> NULL,
> };
> ATTRIBUTE_GROUPS(ext4);
> @@ -425,6 +445,8 @@ static ssize_t ext4_attr_show(struct kobject *kobj,
> return print_tstamp(buf, sbi->s_es, s_last_error_time);
> case attr_journal_task:
> return journal_task_show(sbi, buf);
> + case attr_quota_mode:
> + return quota_mode_show(sbi, buf);
> }
>
> return 0;
> --
> 2.7.4
>
--
Jan Kara <[email protected]>
SUSE Labs, CR

2020-10-17 18:27:37

by Roman Anufriev

[permalink] [raw]
Subject: Re: [PATCH 2/2] ext4: export quota journalling mode via sysfs attr quota_mode

Hi, sorry for the delay.

On Thu, 15 Oct 2020, Jan Kara wrote:

> On Thu 15-10-20 14:32:52, Roman Anufriev wrote:
>> Right now, it is hard to understand what 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 exports via sysfs attr /sys/fs/ext4/<disk>/quota_mode current
>> quota jounalling mode, making it easier to check at a glance/in autotests.
>> The semantics is similar to ext4 data journalling modes:
>>
>> * journalled - quota accounting and journaling are enabled
>> * writeback - quota accounting is enabled, but journalling is disabled
>> * none - quota accounting is disabled
>> * disabled - kernel compiled without CONFIG_QUOTA feature
>>
>> Signed-off-by: Roman Anufriev <[email protected]>
>> Reviewed-by: Dmitry Monakhov <[email protected]>
>
> Hum, I'm not sure about this. The state of quota can be found out with
> "quotaon -p <mntpoint>" (or corresponding quotactl if you need this from
> C). The only thing you won't learn is journalled / writeback mode and
> generally you should not care about this although I agree that for fs
> crash testing purposes you may care. But is that big enough usecase for a
> new sysfs file when all the information is already available for userspace
> just not in a convenient form?

Rationale behind this patch was mainly the addition of an easy way to
check whether quota journalled or not as this is quite wanted feature in
out production environment. TBH, I was not sure about sysfs file too, but
it seemed to me like the most natural place to put it. Maybe if sysfs is
an overkill - just add printing to dmesg on mount? At least, you'll be
able to check what quota type you can enable right after mounting.

> BTW, I've now realized ext4_any_quota_enabled() has actually misleading
> name in the sysfs file reports wrong information. It is rather
> ext4_any_quota_may_be_enabled() since presence of QUOTA mount option only
> says that quotaon(8) will enable quotas if it is run, not that quota
> accounting is enabled. sb_any_quota_loaded() tells you if accounting is
> actually enabled or not (however this can change anytime so that's why we
> use more relaxed checks for the purpose of journal credit estimates).

My bad! Totally forgot about the case when 'quota' mount option is present
but quota accounting is not enabled, as our helper-tool around
'quotactl()' do remounting+enabling in one go.

I'll rename the function to smth like 'ext4_quota_capable()' in v2. And if
printing to dmesg is OK, I'll probably still use this function to print on
mount what the quota type will be after accounting is enabled.

Roman

2020-10-19 10:27:17

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH 2/2] ext4: export quota journalling mode via sysfs attr quota_mode

On Sat 17-10-20 21:26:37, Roman Anufriev wrote:
> Hi, sorry for the delay.
>
> On Thu, 15 Oct 2020, Jan Kara wrote:
>
> > On Thu 15-10-20 14:32:52, Roman Anufriev wrote:
> > > Right now, it is hard to understand what 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 exports via sysfs attr /sys/fs/ext4/<disk>/quota_mode current
> > > quota jounalling mode, making it easier to check at a glance/in autotests.
> > > The semantics is similar to ext4 data journalling modes:
> > >
> > > * journalled - quota accounting and journaling are enabled
> > > * writeback - quota accounting is enabled, but journalling is disabled
> > > * none - quota accounting is disabled
> > > * disabled - kernel compiled without CONFIG_QUOTA feature
> > >
> > > Signed-off-by: Roman Anufriev <[email protected]>
> > > Reviewed-by: Dmitry Monakhov <[email protected]>
> >
> > Hum, I'm not sure about this. The state of quota can be found out with
> > "quotaon -p <mntpoint>" (or corresponding quotactl if you need this from
> > C). The only thing you won't learn is journalled / writeback mode and
> > generally you should not care about this although I agree that for fs
> > crash testing purposes you may care. But is that big enough usecase for a
> > new sysfs file when all the information is already available for userspace
> > just not in a convenient form?
>
> Rationale behind this patch was mainly the addition of an easy way to check
> whether quota journalled or not as this is quite wanted feature in out
> production environment. TBH, I was not sure about sysfs file too, but it
> seemed to me like the most natural place to put it. Maybe if sysfs is an
> overkill - just add printing to dmesg on mount? At least, you'll be able to
> check what quota type you can enable right after mounting.
>
> > BTW, I've now realized ext4_any_quota_enabled() has actually misleading
> > name in the sysfs file reports wrong information. It is rather
> > ext4_any_quota_may_be_enabled() since presence of QUOTA mount option only
> > says that quotaon(8) will enable quotas if it is run, not that quota
> > accounting is enabled. sb_any_quota_loaded() tells you if accounting is
> > actually enabled or not (however this can change anytime so that's why we
> > use more relaxed checks for the purpose of journal credit estimates).
>
> My bad! Totally forgot about the case when 'quota' mount option is present
> but quota accounting is not enabled, as our helper-tool around 'quotactl()'
> do remounting+enabling in one go.
>
> I'll rename the function to smth like 'ext4_quota_capable()' in v2. And if
> printing to dmesg is OK, I'll probably still use this function to print on
> mount what the quota type will be after accounting is enabled.

Yeah, if a message in dmesg is fine for your purposes, I'd rather go with
that than with a sysfs file.

Honza
--
Jan Kara <[email protected]>
SUSE Labs, CR

2020-10-19 10:55:28

by Roman Anufriev

[permalink] [raw]
Subject: Re: [PATCH 2/2] ext4: export quota journalling mode via sysfs attr quota_mode

On Mon, 19 Oct 2020, Jan Kara wrote:

> On Sat 17-10-20 21:26:37, Roman Anufriev wrote:
>> Hi, sorry for the delay.
>>
>> On Thu, 15 Oct 2020, Jan Kara wrote:
>>
>>> On Thu 15-10-20 14:32:52, Roman Anufriev wrote:
>>>> Right now, it is hard to understand what 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 exports via sysfs attr /sys/fs/ext4/<disk>/quota_mode current
>>>> quota jounalling mode, making it easier to check at a glance/in autotests.
>>>> The semantics is similar to ext4 data journalling modes:
>>>>
>>>> * journalled - quota accounting and journaling are enabled
>>>> * writeback - quota accounting is enabled, but journalling is disabled
>>>> * none - quota accounting is disabled
>>>> * disabled - kernel compiled without CONFIG_QUOTA feature
>>>>
>>>> Signed-off-by: Roman Anufriev <[email protected]>
>>>> Reviewed-by: Dmitry Monakhov <[email protected]>
>>>
>>> Hum, I'm not sure about this. The state of quota can be found out with
>>> "quotaon -p <mntpoint>" (or corresponding quotactl if you need this from
>>> C). The only thing you won't learn is journalled / writeback mode and
>>> generally you should not care about this although I agree that for fs
>>> crash testing purposes you may care. But is that big enough usecase for a
>>> new sysfs file when all the information is already available for userspace
>>> just not in a convenient form?
>>
>> Rationale behind this patch was mainly the addition of an easy way to check
>> whether quota journalled or not as this is quite wanted feature in out
>> production environment. TBH, I was not sure about sysfs file too, but it
>> seemed to me like the most natural place to put it. Maybe if sysfs is an
>> overkill - just add printing to dmesg on mount? At least, you'll be able to
>> check what quota type you can enable right after mounting.
>>
>>> BTW, I've now realized ext4_any_quota_enabled() has actually misleading
>>> name in the sysfs file reports wrong information. It is rather
>>> ext4_any_quota_may_be_enabled() since presence of QUOTA mount option only
>>> says that quotaon(8) will enable quotas if it is run, not that quota
>>> accounting is enabled. sb_any_quota_loaded() tells you if accounting is
>>> actually enabled or not (however this can change anytime so that's why we
>>> use more relaxed checks for the purpose of journal credit estimates).
>>
>> My bad! Totally forgot about the case when 'quota' mount option is present
>> but quota accounting is not enabled, as our helper-tool around 'quotactl()'
>> do remounting+enabling in one go.
>>
>> I'll rename the function to smth like 'ext4_quota_capable()' in v2. And if
>> printing to dmesg is OK, I'll probably still use this function to print on
>> mount what the quota type will be after accounting is enabled.
>
> Yeah, if a message in dmesg is fine for your purposes, I'd rather go with
> that than with a sysfs file.

I think it'll be enough. I've implemented this in v3 (skip the v2, please
- made a syntax mistake there):
https://lore.kernel.org/linux-ext4/[email protected]/

Roman