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

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

 



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