2020-06-26 07:00:53

by Chengguang Xu

[permalink] [raw]
Subject: [PATCH] ext2: initialize quota info in ext2_xattr_set()

In order to correctly account/limit space usage, should initialize
quota info before calling quota related functions.

Signed-off-by: Chengguang Xu <[email protected]>
---
fs/ext2/xattr.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
index 943cc469f42f..913e5c4921ec 100644
--- a/fs/ext2/xattr.c
+++ b/fs/ext2/xattr.c
@@ -437,6 +437,9 @@ ext2_xattr_set(struct inode *inode, int name_index, const char *name,
name_len = strlen(name);
if (name_len > 255 || value_len > sb->s_blocksize)
return -ERANGE;
+ error = dquot_initialize(inode);
+ if (error)
+ return error;
down_write(&EXT2_I(inode)->xattr_sem);
if (EXT2_I(inode)->i_file_acl) {
/* The inode already has an extended attribute block. */
--
2.26.2



2020-07-08 10:53:11

by Ritesh Harjani

[permalink] [raw]
Subject: Re: [PATCH] ext2: initialize quota info in ext2_xattr_set()



On 6/26/20 11:19 AM, Chengguang Xu wrote:
> In order to correctly account/limit space usage, should initialize
> quota info before calling quota related functions.

How did you encounter the problem?
Any test case got hit?

>
> Signed-off-by: Chengguang Xu <[email protected]>

LGTM, feel free to add
Reviewed-by: Reviewed-by: Ritesh Harjani <[email protected]>


> ---
> fs/ext2/xattr.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
> index 943cc469f42f..913e5c4921ec 100644
> --- a/fs/ext2/xattr.c
> +++ b/fs/ext2/xattr.c
> @@ -437,6 +437,9 @@ ext2_xattr_set(struct inode *inode, int name_index, const char *name,
> name_len = strlen(name);
> if (name_len > 255 || value_len > sb->s_blocksize)
> return -ERANGE;
> + error = dquot_initialize(inode);
> + if (error)
> + return error;
> down_write(&EXT2_I(inode)->xattr_sem);
> if (EXT2_I(inode)->i_file_acl) {
> /* The inode already has an extended attribute block. */
>

2020-07-08 11:21:36

by Jan Kara

[permalink] [raw]
Subject: Re: [PATCH] ext2: initialize quota info in ext2_xattr_set()

On Wed 08-07-20 16:22:01, Ritesh Harjani wrote:
>
>
> On 6/26/20 11:19 AM, Chengguang Xu wrote:
> > In order to correctly account/limit space usage, should initialize
> > quota info before calling quota related functions.
>
> How did you encounter the problem?
> Any test case got hit?
>
> >
> > Signed-off-by: Chengguang Xu <[email protected]>
>
> LGTM, feel free to add
> Reviewed-by: Reviewed-by: Ritesh Harjani <[email protected]>

Thanks. I've added the patch to my tree.

Honza

>
>
> > ---
> > fs/ext2/xattr.c | 3 +++
> > 1 file changed, 3 insertions(+)
> >
> > diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
> > index 943cc469f42f..913e5c4921ec 100644
> > --- a/fs/ext2/xattr.c
> > +++ b/fs/ext2/xattr.c
> > @@ -437,6 +437,9 @@ ext2_xattr_set(struct inode *inode, int name_index, const char *name,
> > name_len = strlen(name);
> > if (name_len > 255 || value_len > sb->s_blocksize)
> > return -ERANGE;
> > + error = dquot_initialize(inode);
> > + if (error)
> > + return error;
> > down_write(&EXT2_I(inode)->xattr_sem);
> > if (EXT2_I(inode)->i_file_acl) {
> > /* The inode already has an extended attribute block. */
> >
>
--
Jan Kara <[email protected]>
SUSE Labs, CR

2020-07-11 07:33:59

by Chengguang Xu

[permalink] [raw]
Subject: Re: [PATCH] ext2: initialize quota info in ext2_xattr_set()

在 7/8/2020 6:52 PM, Ritesh Harjani 写道:
>
>
> On 6/26/20 11:19 AM, Chengguang Xu wrote:
>> In order to correctly account/limit space usage, should initialize
>> quota info before calling quota related functions.
>
> How did you encounter the problem?
> Any test case got hit?

I found the issue by code inspecting when I was learning mbcache logic.

Thanks,
cgxu

>
>>
>> Signed-off-by: Chengguang Xu <[email protected]>
>
> LGTM, feel free to add
> Reviewed-by: Reviewed-by: Ritesh Harjani <[email protected]>
>
>
>> ---
>>   fs/ext2/xattr.c | 3 +++
>>   1 file changed, 3 insertions(+)
>>
>> diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
>> index 943cc469f42f..913e5c4921ec 100644
>> --- a/fs/ext2/xattr.c
>> +++ b/fs/ext2/xattr.c
>> @@ -437,6 +437,9 @@ ext2_xattr_set(struct inode *inode, int
>> name_index, const char *name,
>>       name_len = strlen(name);
>>       if (name_len > 255 || value_len > sb->s_blocksize)
>>           return -ERANGE;
>> +    error = dquot_initialize(inode);
>> +    if (error)
>> +        return error;
>>       down_write(&EXT2_I(inode)->xattr_sem);
>>       if (EXT2_I(inode)->i_file_acl) {
>>           /* The inode already has an extended attribute block. */
>>