On Thu, Aug 3, 2017 at 11:00 PM, Chris Mason <clm@xxxxxx> wrote:
>
>
> On 07/27/2017 02:52 PM, fdmanana@xxxxxxxxxx wrote:
>>
>> From: Filipe Manana <fdmanana@xxxxxxxx>
>>
>> If the range being cleared was not marked for defrag and we are not
>> about to clear the range from the defrag status, we don't need to
>> lock and unlock the inode.
>>
>> Signed-off-by: Filipe Manana <fdmanana@xxxxxxxx>
>
>
> Thanks Filipe, looks like it goes all the way back to:
>
> commit 47059d930f0e002ff851beea87d738146804726d
> Author: Wang Shilong <wangsl.fnst@xxxxxxxxxxxxxx>
> Date: Thu Jul 3 18:22:07 2014 +0800
>
> Btrfs: make defragment work with nodatacow option
>
> I can't see how the inode lock is required here.
This blames to me, thanks for fixing it.
Reviewed-by: Wang Shilong <wangshilong1991@xxxxxxxxx>
>
> Reviewed-by: Chris Mason <clm@xxxxxx>
>
> -chris
>
>> ---
>> fs/btrfs/inode.c | 7 ++++---
>> 1 file changed, 4 insertions(+), 3 deletions(-)
>>
>> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
>> index eb495e956d53..51c45c0a8553 100644
>> --- a/fs/btrfs/inode.c
>> +++ b/fs/btrfs/inode.c
>> @@ -1797,10 +1797,11 @@ static void btrfs_clear_bit_hook(void
>> *private_data,
>> u64 len = state->end + 1 - state->start;
>> u32 num_extents = count_max_extents(len);
>> - spin_lock(&inode->lock);
>> - if ((state->state & EXTENT_DEFRAG) && (*bits & EXTENT_DEFRAG))
>> + if ((state->state & EXTENT_DEFRAG) && (*bits & EXTENT_DEFRAG)) {
>> + spin_lock(&inode->lock);
>> inode->defrag_bytes -= len;
>> - spin_unlock(&inode->lock);
>> + spin_unlock(&inode->lock);
>> + }
>> /*
>> * set_bit and clear bit hooks normally require _irqsave/restore
>>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html