From mboxrd@z Thu Jan 1 00:00:00 1970 From: Josef Bacik Subject: Re: [PATCH 2/2] btrfs: fix deadlock when doing reservation Date: Thu, 16 Jun 2011 13:17:50 -0400 Message-ID: <4DFA3ABE.5000109@redhat.com> References: <4DF88DCF.2030502@cn.fujitsu.com> <4DF8B722.2090704@redhat.com> <4DFA189E.8020606@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Cc: miaox@cn.fujitsu.com, Chris Mason , Linux Btrfs To: Mitch Harder Return-path: In-Reply-To: List-ID: On 06/16/2011 01:17 PM, Mitch Harder wrote: > On Thu, Jun 16, 2011 at 9:52 AM, Josef Bacik wrote: >> On 06/16/2011 10:36 AM, Mitch Harder wrote: >>> 2011/6/15 Josef Bacik : >>>> 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 >>>> >>>> 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