diff options
author | Yan, Zheng <zheng.yan@oracle.com> | 2009-11-12 04:33:26 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2009-12-15 21:24:25 -0500 |
commit | 8cef4e160d74920ad1725f58c89fd75ec4c4ac38 (patch) | |
tree | c1592369c7085e75d67a1709438a4f56351b2348 /fs/btrfs/disk-io.c | |
parent | 22763c5cf3690a681551162c15d34d935308c8d7 (diff) |
Btrfs: Avoid superfluous tree-log writeout
We allow two log transactions at a time, but use same flag
to mark dirty tree-log btree blocks. So we may flush dirty
blocks belonging to newer log transaction when committing a
log transaction. This patch fixes the issue by using two
flags to mark dirty tree-log btree blocks.
Signed-off-by: Yan Zheng <zheng.yan@oracle.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 02b6afbd7450..101940fab9b3 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -980,12 +980,12 @@ int btrfs_free_log_root_tree(struct btrfs_trans_handle *trans, | |||
980 | 980 | ||
981 | while (1) { | 981 | while (1) { |
982 | ret = find_first_extent_bit(&log_root_tree->dirty_log_pages, | 982 | ret = find_first_extent_bit(&log_root_tree->dirty_log_pages, |
983 | 0, &start, &end, EXTENT_DIRTY); | 983 | 0, &start, &end, EXTENT_DIRTY | EXTENT_NEW); |
984 | if (ret) | 984 | if (ret) |
985 | break; | 985 | break; |
986 | 986 | ||
987 | clear_extent_dirty(&log_root_tree->dirty_log_pages, | 987 | clear_extent_bits(&log_root_tree->dirty_log_pages, start, end, |
988 | start, end, GFP_NOFS); | 988 | EXTENT_DIRTY | EXTENT_NEW, GFP_NOFS); |
989 | } | 989 | } |
990 | eb = fs_info->log_root_tree->node; | 990 | eb = fs_info->log_root_tree->node; |
991 | 991 | ||