aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/ctree.h
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2008-12-10 09:10:46 -0500
committerChris Mason <chris.mason@oracle.com>2008-12-10 09:10:46 -0500
commit459931eca5f4b8c9ad259d07cc1ca49afed54804 (patch)
tree86088c14cff53f93281dc25022b61fb1d86c2458 /fs/btrfs/ctree.h
parent580afd76e451deb6772d0507de580fb1df14da6c (diff)
Btrfs: Delete csum items when freeing extents
This finishes off the new checksumming code by removing csum items for extents that are no longer in use. The trick is doing it without racing because a single csum item may hold csums for more than one extent. Extra checks are added to btrfs_csum_file_blocks to make sure that we are using the correct csum item after dropping locks. A new btrfs_split_item is added to split a single csum item so it can be split without dropping the leaf lock. This is used to remove csum bytes from the middle of an item. Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/ctree.h')
-rw-r--r--fs/btrfs/ctree.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index f72b43819349..5b0c79d22c09 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -409,6 +409,12 @@ struct btrfs_path {
409 int keep_locks; 409 int keep_locks;
410 int skip_locking; 410 int skip_locking;
411 int lowest_level; 411 int lowest_level;
412
413 /*
414 * set by btrfs_split_item, tells search_slot to keep all locks
415 * and to force calls to keep space in the nodes
416 */
417 int search_for_split;
412}; 418};
413 419
414/* 420/*
@@ -1816,6 +1822,11 @@ int btrfs_truncate_item(struct btrfs_trans_handle *trans,
1816 struct btrfs_root *root, 1822 struct btrfs_root *root,
1817 struct btrfs_path *path, 1823 struct btrfs_path *path,
1818 u32 new_size, int from_end); 1824 u32 new_size, int from_end);
1825int btrfs_split_item(struct btrfs_trans_handle *trans,
1826 struct btrfs_root *root,
1827 struct btrfs_path *path,
1828 struct btrfs_key *new_key,
1829 unsigned long split_offset);
1819int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root 1830int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root
1820 *root, struct btrfs_key *key, struct btrfs_path *p, int 1831 *root, struct btrfs_key *key, struct btrfs_path *p, int
1821 ins_len, int cow); 1832 ins_len, int cow);
@@ -1953,6 +1964,8 @@ int btrfs_lookup_inode(struct btrfs_trans_handle *trans, struct btrfs_root
1953 struct btrfs_key *location, int mod); 1964 struct btrfs_key *location, int mod);
1954 1965
1955/* file-item.c */ 1966/* file-item.c */
1967int btrfs_del_csums(struct btrfs_trans_handle *trans,
1968 struct btrfs_root *root, u64 bytenr, u64 len);
1956int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode, 1969int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode,
1957 struct bio *bio, u32 *dst); 1970 struct bio *bio, u32 *dst);
1958int btrfs_insert_file_extent(struct btrfs_trans_handle *trans, 1971int btrfs_insert_file_extent(struct btrfs_trans_handle *trans,