On 2019/9/12 下午3:53, Filipe Manana wrote:
> On Thu, Sep 12, 2019 at 2:31 AM Qu Wenruo <wqu@xxxxxxxx> wrote:
>>
>> Commit bc42bda22345 ("btrfs: qgroup: Fix qgroup reserved space underflow by
>> only freeing reserved ranges") is freeing wrong range in
>> BTRFS_I()->io_failure_tree, which should be BTRFS_I()->io_tree.
>
> I think you meant wrong tree and not wrong range, since the code
> doesn't change the range, only the target tree.
Right, wrong tree.
>
> Also, for the sake of completeness, and no matter how obvious you
> think it is, can you explicitly mention what's the consequence? I
> presume it's a qgroup reserved space leak or underflow.
Yes, qgroup reserved space leak for some error path.
I'll enhance the comment, and also craft a test case for it.
Thanks,
Qu
>
> Thanks.
>
>>
>> Just fix it.
>>
>> Reported-by: Josef Bacik <josef@xxxxxxxxxxxxxx>
>> Fixes: bc42bda22345 ("btrfs: qgroup: Fix qgroup reserved space underflow by only freeing reserved ranges")
>> Signed-off-by: Qu Wenruo <wqu@xxxxxxxx>
>> ---
>> fs/btrfs/qgroup.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
>> index 2891b57b9e1e..64bdc3e3652d 100644
>> --- a/fs/btrfs/qgroup.c
>> +++ b/fs/btrfs/qgroup.c
>> @@ -3492,7 +3492,7 @@ static int qgroup_free_reserved_data(struct inode *inode,
>> * EXTENT_QGROUP_RESERVED, we won't double free.
>> * So not need to rush.
>> */
>> - ret = clear_record_extent_bits(&BTRFS_I(inode)->io_failure_tree,
>> + ret = clear_record_extent_bits(&BTRFS_I(inode)->io_tree,
>> free_start, free_start + free_len - 1,
>> EXTENT_QGROUP_RESERVED, &changeset);
>> if (ret < 0)
>> --
>> 2.23.0
>>
>
>
Attachment:
signature.asc
Description: OpenPGP digital signature
