Btrfs: reclaim delalloc metadata more aggressively
authorMiao Xie <miaox@cn.fujitsu.com>
Thu, 6 Mar 2014 05:55:00 +0000 (13:55 +0800)
committerJosef Bacik <jbacik@fb.com>
Mon, 10 Mar 2014 19:17:26 +0000 (15:17 -0400)
commit24af7dd1881f9f5c13c7d82e22d7858137383766
tree680b41cf74a472712f6ff57796531d21842d6a12
parent0424c548976b4c2a72c0bdbea425cf9d51e82d0f
Btrfs: reclaim delalloc metadata more aggressively

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: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Josef Bacik <jbacik@fb.com>
fs/btrfs/extent-tree.c