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
