• Miao Xie's avatar
    Btrfs: reclaim delalloc metadata more aggressively · 24af7dd1
    Miao Xie authored
    generic/074 in xfstests failed sometimes because of the enospc error,
    the reason of this problem is that we just reclaimed the space we need
    from the reserved space for delalloc, and then tried to reserve the space,
    but if some task did no-flush reservation between the above reclamation
    and reservation,
    	Task1			Task2
    	shrink_delalloc()
    	reclaim 1 block
    	(The space that can
    	 be reserved now is 1
    	 block)
    				do no-flush reservation
    				reserve 1 block
    				(The space that can
    				 be reserved now is 0
    				 block)
    	reserving 1 block failed
    the reservation of Task1 failed, but in fact, there was enough space to
    reserve if we could reclaim more space before.
    
    Fix this problem by the aggressive reclamation of the reserved delalloc
    metadata space.
    Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
    Signed-off-by: default avatarJosef Bacik <jbacik@fb.com>
    24af7dd1
extent-tree.c 239 KB