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
