Re: [PATCH 2/2] btrfs: fix deadlock when doing reservation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/16/2011 01:17 PM, Mitch Harder wrote:
> On Thu, Jun 16, 2011 at 9:52 AM, Josef Bacik <josef@xxxxxxxxxx> wrote:
>> On 06/16/2011 10:36 AM, Mitch Harder wrote:
>>> 2011/6/15 Josef Bacik <josef@xxxxxxxxxx>:
>>>> On 06/15/2011 06:47 AM, Miao Xie wrote:
>>>>> The following deadlock may happen when doing reservation for metadata:
>>>>>
>>>>> Task0                         Flush thread            Task1
>>>>> start_transaction()
>>>>>   shrink_delalloc()
>>>>>     writeback_inodes_sb_nr()
>>>>>       wait for flush thread
>>>>>       end.
>>>>>                               btrfs_writepages()
>>>>>                                 cow_file_range()
>>>>>                                                       btrfs_commit_transaction
>>>>>                                                         wait num_writer == 1
>>>>>                                                         (wait Task0 end
>>>>>                                                          transaction)
>>>>>                                 start_transaction()
>>>>>                                   wait trans commit
>>>>>                                   end
>>>>>
>>>>> Task0 -> Flush thread -> Task1 -> Task0
>>>>>
>>>>> Fix the above deadlock by doing reservation before the trans handle has
>>>>> been joined into the transaction.
>>>>>
>>>>> Signed-off-by: Miao Xie <miaox@xxxxxxxxxxxxxx>
>>>>
>>>> I've already taken care of this in
>>>>
>>>> [PATCH 1/2] Btrfs: do transaction space reservation before joining the
>>>> transaction
>>>>
>>>> Thanks,
>>>>
>>>> Josef
>>>
>>> I've been trying to run down an issue with btrfs freezing with the
>>> 3.0_rc btrfs patch set.  I've found a test case that repeatably
>>> freezes up on my system, and have been surveying the patches on the
>>> list to see if the issue has already been resolved.
>>>
>>> I've been successful in addressing the deadlock by applying Miao Xie's
>>> patches (I've tested with both "[1/2] btrfs: fix wrong reservation
>>> when doing delayed inode operations" and "[2/2] btrfs: fix deadlock
>>> when doing reservation").
>>>
>>> I've only been partially successful in running my test case with Josef
>>> Bacik's patches (the deadlock is cleared; however, now I'm running
>>> into a premature ENOSPC).
>>>
>>> When evaluating Josef's patches, I've applied:
>>> Btrfs: account for space reservations properly V2
>>> Btrfs: fix btrfs_update_reserved_bytes usage
>>> [1/2] Btrfs: do transaction space reservation before joining the transaction
>>> [2/2] Btrfs: serialize flushers in reserve_metadata_bytes
>>>
>>
>> So drop those first 2, they are wrong and why they are giving you early
>> enospc.  The last two are what you want and should fix your deadlock.
>> Thanks,
>>
> 
> Confirmed.
> 
> The deadlock is cleared in my test case when applying just the "[1/2]
> Btrfs: do transaction space reservation before joining the
> transaction" patch and the "[2/2] Btrfs: serialize flushers in
> reserve_metadata_bytes" patch.

Perfect, thanks,

Josef
--
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


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux