diff options
author | Chris Mason <chris.mason@oracle.com> | 2008-10-01 19:05:46 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-10-01 19:05:46 -0400 |
commit | 323ac95bce442bbde514e3ce57e840402f80d909 (patch) | |
tree | 9b2241ed4de746087fdfb66f83fc142279648f9b /fs/btrfs/ctree.h | |
parent | cf749823857230017c86504bfdc70524f929ba96 (diff) |
Btrfs: don't read leaf blocks containing only checksums during truncate
Checksum items take up a significant portion of the metadata for large files.
It is possible to avoid reading them during truncates by checking the keys in
the higher level nodes.
If a given leaf is followed by another leaf where the lowest key is a checksum
item from the same file, we know we can safely delete the leaf without
reading it.
For a 32GB file on a 6 drive raid0 array, Btrfs needs 8s to delete
the file with a cold cache. It is read bound during the run.
With this change, Btrfs is able to delete the file in 0.5s
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r-- | fs/btrfs/ctree.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index ded1643c0273..94e0cdfddc0c 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h | |||
@@ -1649,7 +1649,9 @@ void btrfs_free_path(struct btrfs_path *p); | |||
1649 | void btrfs_init_path(struct btrfs_path *p); | 1649 | void btrfs_init_path(struct btrfs_path *p); |
1650 | int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, | 1650 | int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root, |
1651 | struct btrfs_path *path, int slot, int nr); | 1651 | struct btrfs_path *path, int slot, int nr); |
1652 | 1652 | int btrfs_del_leaf(struct btrfs_trans_handle *trans, | |
1653 | struct btrfs_root *root, | ||
1654 | struct btrfs_path *path, u64 bytenr); | ||
1653 | static inline int btrfs_del_item(struct btrfs_trans_handle *trans, | 1655 | static inline int btrfs_del_item(struct btrfs_trans_handle *trans, |
1654 | struct btrfs_root *root, | 1656 | struct btrfs_root *root, |
1655 | struct btrfs_path *path) | 1657 | struct btrfs_path *path) |