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

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