Btrfs: don't read leaf blocks containing only checksums during truncate
authorChris Mason <chris.mason@oracle.com>
Wed, 1 Oct 2008 23:05:46 +0000 (19:05 -0400)
committerChris Mason <chris.mason@oracle.com>
Wed, 1 Oct 2008 23:05:46 +0000 (19:05 -0400)
commit323ac95bce442bbde514e3ce57e840402f80d909
tree9b2241ed4de746087fdfb66f83fc142279648f9b
parentcf749823857230017c86504bfdc70524f929ba96
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>
fs/btrfs/ctree.c
fs/btrfs/ctree.h
fs/btrfs/inode.c