]> git.baikalelectronics.ru Git - kernel.git/commit
Btrfs: improve the noflush reservation
authorMiao Xie <miaox@cn.fujitsu.com>
Tue, 16 Oct 2012 11:33:38 +0000 (11:33 +0000)
committerJosef Bacik <jbacik@fusionio.com>
Tue, 11 Dec 2012 18:31:31 +0000 (13:31 -0500)
commit40c431fd6cebe612988c9aac8f191dff8ecd01ca
tree84227c096c05bc4c5430190f0f550b094d3bf2b7
parentd6a5bea00cca29df3d80af89d3ee03c73bbb68a8
Btrfs: improve the noflush reservation

In some places(such as: evicting inode), we just can not flush the reserved
space of delalloc, flushing the delayed directory index and delayed inode
is OK, but we don't try to flush those things and just go back when there is
no enough space to be reserved. This patch fixes this problem.

We defined 3 types of the flush operations: NO_FLUSH, FLUSH_LIMIT and FLUSH_ALL.
If we can in the transaction, we should not flush anything, or the deadlock
would happen, so use NO_FLUSH. If we flushing the reserved space of delalloc
would cause deadlock, use FLUSH_LIMIT. In the other cases, FLUSH_ALL is used,
and we will flush all things.

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
fs/btrfs/ctree.h
fs/btrfs/delayed-inode.c
fs/btrfs/extent-tree.c
fs/btrfs/inode-map.c
fs/btrfs/inode.c
fs/btrfs/relocation.c
fs/btrfs/transaction.c
fs/btrfs/transaction.h